У меня есть данные 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?
3 ответа
Кажется, я нашел решение. Если вы предоставляете строку base64 в качестве содержимого, обязательно укажите кодировку. В противном случае Rails закодирует уже закодированную строку во второй раз.
attachments['base64_file.pdf'] = {
mime_type: 'application/pdf',
encoding: 'base64',
content: base64_string
}
Эта ссылка должна помочь.
http://apidock.com/rails/ActionMailer/Base/attachments
attachments['attachment.pdf'] = { mime_type: 'application/pdf',
content: File.read('/path/to/filename.pdf')}
Из документа Rails:
Mail автоматически закодирует вложение Base64. Если вы хотите чего-то другого, закодируйте свой контент и передайте закодированный контент и кодирование в хеш-формате методу вложений.
Таким образом, вы просто устанавливаете содержимое как строку base64 без указания кодировки. Это будет работать, вот что я сделал в своем проекте:
attachments['attachment.pdf'] = {
mime_type: 'application/pdf',
content: base64_encoded_string
}
Похожие вопросы
Новые вопросы
ruby-on-rails
Ruby on Rails - это полнофункциональная платформа веб-приложений с открытым исходным кодом, написанная на Ruby. Он следует популярной модели фреймворка MVC и известен своим подходом «соглашение поверх конфигурации» при разработке приложений.