我使用邮戳从应用程序发送电子邮件。它适用于普通电子邮件,但电子邮件附件无效。
它在本地工作正常,因为在本地我有smtp +邮戳设置(为了在本地工作我们需要与smtp一起使用邮戳)
但是在暂存和制作上我只使用SMTP设置
config / environments / staging.rb 和 config / environments / production.rb
POSTMARK_API_KEY = "<my-api-key>"
config.action_mailer.delivery_method = :postmark
config.action_mailer.postmark_settings = { :api_key => POSTMARK_API_KEY }
配置/环境/ development.rb
POSTMARK_API_KEY = "<my-api-key>"
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => "smtp.postmarkapp.com",
:port => 25,
:domain => 'example.com',
:user_name => POSTMARK_API_KEY,
:password => POSTMARK_API_KEY,
:authentication => 'plain',
:enable_starttls_auto => true }
user_mailer.rb
class UserMailer < ActionMailer::Base
default from: DEFAULT_EMAIL
def send_request(params, attachment)
if attachment.present?
mime_type = MIME::Types.type_for(attachment).first
attachments["#{attachment.split('/').last}"] = { mime_type: mime_type,
content: attachment, encoding: 'base64' }
end
mail(
to: <some_email>,
subject: "Refer Request",
tag: "refer_request")
end
此处attachment
是S3上保存的文件的网址。
在开发模式下,我收到附件的电子邮件。
但不是在分期和开发模式。
任何帮助或建议将不胜感激。感谢。
答案 0 :(得分:2)
此方法使用curl命令。
需要获取远程文件内容require "open-uri"
需要获得编码 - 解码方法
require "base64"
传递您的远程文件URL以获取其内容
file_data = open('https://example.com/dummy.pdf').read
加密bin对象以通过电子邮件发送它
encrypt_data = Base64.encode64(file_data)
您现在可以使用邮戳api发送带附件的电子邮件,并确保在X-Postmark-Server-Token中传递您的API-KEY
system "curl -X POST \"http://api.postmarkapp.com/email\" \
-H \"Accept: application/json\" \
-H \"Content-Type: application/json\" \
-H \"X-Postmark-Server-Token: POSTMARK_API_KEY\” \
-v \
-d \"{From: 'from@example.com', To: 'to@example.com', Subject: 'Postmark test for Attachment Email', HtmlBody: '<html><body><strong>Hello</strong> dear Postmark user you have received email with attachment.</body></html>', Attachments:[{'ContentType': 'application/pdf', 'Name': 'dummy.pdf', 'Content': '#{encrypt_data}'}]}\""
答案 1 :(得分:1)
最后我能找到上述问题的实际原因。
我正在使用gem postmark-rails,之前的邮戳不支持电子邮件附件,所以最近他们有增强的gem来支持附件,不幸的是我使用的是旧版本,所以我需要更新gem他们在其中一个问题中提到的最新版本:attachment-issue
我也试图发送保存在S3上的文件的URL,所以我不需要从url读取该文件然后将其作为附件发送
require "open-uri"
def send_refer_pt_request(params, attachment)
if attachment.present?
mime_type = MIME::Types.type_for(attachment).first
url_data = open(attachment).read()
attachments["#{attachment.split('/').last}"] = { mime_type: mime_type,
content: url_data }
end
mail(
to: <some_email>,
subject: "Refer Request",
tag: "refer_request")
end