尝试获取表单以向Mandrill api发送电子邮件。我的电子邮件不断排队,不会发送。
post '/my-handling-form-page' do
m = Mandrill::API.new
message = {
:subject => "Hello from the Mandrill API",
:from_name => "#{params[:name]} #{params[:email]}",
:text => "Hi message how are you?",
:to => [
{
:email => "anonymous@gmail.com",
:name => "Recipient1"
}
],
:html => "<html>#{params[:msg]}</html>",
:from_email => "anonymous@gmail.com"
}
sending = m.messages.send message
puts sending
erb :index
end
错误说: {“email”=&gt;“anonymous@gmail.com”,“status”=&gt;“排队”,“_ id”=&gt;“216c30f42ee849e2a70528e3d4f9774f”,“reject_reason”=&gt; nil}
帮助将不胜感激。
答案 0 :(得分:1)
来自Mandrill文档:
为什么传递的消息说&#34;排队&#34;?
Mandrill会自动跟踪并记录我们收到的SMTP响应 从您发送的每封电子邮件的收件人邮件服有些成功 已发送的电子邮件将包含一个排队的&#34; SMTP响应中的表示法 如250 OK;排队等于12345.电子邮件仍然已发送至 收件人符合预期,但可能需要额外处理 在它落入收件人的邮箱之前。例如,大多数时候 Mandrill可以比收件人服务器更快地发送电子邮件 接受或处理它。在许多情况下,像一天中的时间和 到该ISP或收件人服务器的整体电子邮件流量可能会影响 他们很快就能够收到并处理您的电子邮件。
您的代码似乎很好。看起来收件人的服务器可能存在问题。
答案 1 :(得分:1)
来自Mandrill的回复邮件:
感谢您与我们联系。在这种情况下,似乎传递给 Mandrill 的API调用包含几个无效参数 - 但是,由于您还在该API调用中向我们传递了附件数组,因此您将看不到响应表明它是无效的API调用。
每当Mandrill收到附件时,我们将始终返回“已排队”的响应,因为在我们以任何其他方式处理病毒/恶意软件之前,我们的系统会将该消息设置为扫描附件中的病毒/恶意软件。这意味着,如果API调用出现其他问题,您将不会收到警报,并且“默默地”会失败。
您好像已经从我们的默认API文档中包含了几个参数,但这些参数旨在向用户展示如何包含这些参数。
**"subaccount"**: "customer-123",
和
**"ip_pool"**: "Main Pool",
两者都会导致此API调用失败,因为您指定了帐户中不存在的选项。我建议您浏览API代码并删除任何不使用的内容。作为参考,发送电子邮件所需的最小API调用如下所示:
{
"message": {
"html": "<html content>",
"subject": "<subject>",
"from_email": "<sender email address>",
"from_name": "<sender name>",
"to": [
{
"email": "<recipient email address>",
"name": "<recipient name>",
"type": "to"
}
],
"headers": {
"Reply-To": "<reply-to address>"
}
},
"async": false,
"ip_pool": null,
"send_at": null,
"key": "<valid API key>"
}
所以在这个有价值的回应后,这对Django的工作对我来说:)
def send_mail_msg():
import mandrill
try:
mandrill_client = mandrill.Mandrill('xxxxxxxxxxxxxxx')
message = {
# 'attachments': [{'content': 'ZXhhbXBsZSBmaWxl',
# 'name': 'myfile.txt',
# 'type': 'text/plain'}],
'auto_html': None,
'auto_text': None,
# 'bcc_address': 'message.bcc_address@example.com',
'from_email': 'xxxxx@xxxx.com',
'from_name': 'Example Name',
'global_merge_vars': [{'content': 'merge1 content', 'name': 'merge1'}],
'google_analytics_campaign': 'gaurav@nexthoughts.com',
'google_analytics_domains': ['example.com'],
# 'headers': {'Reply-To': 'message.reply@example.com'},
'html': '<p>Example HTML content</p>',
'images': [{'content': 'ZXhhbXBsZSBmaWxl',
'name': 'IMAGECID',
'type': 'image/png'}],
'important': False,
'inline_css': None,
'merge': True,
'merge_language': 'mailchimp',
# 'merge_vars': [{'rcpt': 'recipient.email@example.com',
# 'vars': [{'content': 'merge2 content', 'name': 'merge2'}]}],
'metadata': {'website': 'www.example.com'},
'preserve_recipients': None,
'recipient_metadata': [{'rcpt': 'recipient.email@example.com',
'values': {'user_id': 123456}}],
'return_path_domain': None,
'signing_domain': None,
# 'subaccount': 'customer-123',
'subject': 'example subject',
'tags': ['password-resets'],
'text': 'Example text content',
'to': [{'email': 'xxxxx@xxxx.com',
'name': 'Recipient Name',
'type': 'to'}],
'track_clicks': None,
'track_opens': None,
'tracking_domain': None,
'url_strip_qs': None,
'view_content_link': None}
result = mandrill_client.messages.send(message=message, async=False, ip_pool='Main Pool')
# send_at=str(datetime.datetime.now().time()))
'''
[{'_id': 'abc123abc123abc123abc123abc123',
'email': 'recipient.email@example.com',
'reject_reason': 'hard-bounce',
'status': 'sent'}]
'''
return result
except mandrill.Error as e: # Mandrill errors are thrown as exceptions
print 'A mandrill error occurred: %s - %s' % (e.__class__, e)
# A mandrill error occurred: <class 'mandrill.UnknownSubaccountError'> - No subaccount exists with the id 'customer-123'
raise`
答案 2 :(得分:0)
根据Mandrill api:
子帐户
the unique id of a subaccount for this message - must already exist or will fail with an error.
(至少对我来说,测试在删除该字段后开始工作)。 Mandrill绝对应该改善他们的反应错误。