У меня есть данные PDF в кодировке Base64, и я хочу установить их как вложение к письму с помощью ActionMailer.

Я пробовал следующее (предположим, что данные PDF в кодировке Base64 находятся в base64_encoded_string):

attachments['attachment.pdf'] = {
  mime_type: 'application/pdf',
  encoding: 'base64',
  content: base64_encoded_string
}

Но когда я открываю прикрепленный файл pdf к полученному электронному письму, файл поврежден.

Теперь я заранее декодирую строку Base64, чтобы ActionMailer кодировал Base64, и он работает без проблем.

attachments[File.basename('attachment.pdf')] = Base64.decode64(base64_encoded_string)

Как вы можете напрямую получить строку в кодировке Base64 в виде вложения PDF?

4
5t111111 26 Май 2016 в 06:23

3 ответа

Лучший ответ

Кажется, я нашел решение. Если вы предоставляете строку base64 в качестве содержимого, обязательно укажите кодировку. В противном случае Rails закодирует уже закодированную строку во второй раз.

attachments['base64_file.pdf'] = {
  mime_type: 'application/pdf',
  encoding: 'base64',
  content: base64_string
}
4
poctek 24 Май 2017 в 19:17

Эта ссылка должна помочь.

http://apidock.com/rails/ActionMailer/Base/attachments

attachments['attachment.pdf'] = { mime_type: 'application/pdf', 
                                  content:  File.read('/path/to/filename.pdf')}
-3
ab29007 23 Дек 2016 в 04:23

Из документа Rails:

Mail автоматически закодирует вложение Base64. Если вы хотите чего-то другого, закодируйте свой контент и передайте закодированный контент и кодирование в хеш-формате методу вложений.

Таким образом, вы просто устанавливаете содержимое как строку base64 без указания кодировки. Это будет работать, вот что я сделал в своем проекте:

attachments['attachment.pdf'] = {
  mime_type: 'application/pdf',
  content: base64_encoded_string
}
0
Hieu Pham 26 Май 2016 в 04:31