【问题标题】:Mandrill API E-mail queue with sinatra带有 sinatra 的 Mandrill API 电子邮件队列
【发布时间】:2014-12-28 04:31:43
【问题描述】:

尝试获取表单以向 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"=>"anonymous@gmail.com", "status"=>"queued", "_id"=>"216c30f42ee849e2a70528e3d4f9774f", "reject_reason"=>nil}

我们将不胜感激。

【问题讨论】:

    标签: api email sinatra mandrill


    【解决方案1】:

    来自 Mandrill 文档:

    为什么发送的消息会显示“已排队”?

    Mandrill 自动跟踪并记录我们收到的 SMTP 响应 从您发送的每封电子邮件的收件人邮件服务器。有的成功 发送的电子邮件将在 SMTP 响应中包含“排队”符号 比如250 OK;排队为 12345。电子邮件仍被发送到 收件人符合预期,但可能需要额外处理 在它落入收件人邮箱之前。例如,大多数时候 Mandrill 可以比收件人服务器更快地发送电子邮件 接受或处理它。在许多情况下,诸如一天中的时间和 到该 ISP 或收件人服务器的总体电子邮件流量可能会影响 他们很快就能接收和处理您的电子邮件。

    您的代码看起来不错。看起来收件人的服务器可能有问题。

    【讨论】:

    • 谢谢,我想这一定是 Gmail 的问题。也许用 aol 或 yahoo 帐户试试吧。
    • 对不起,这是不正确的。此处引用的文档中讨论的 status 与 API 调用返回的 status 值不同。见this answer from Mandrill for details
    【解决方案2】:

    来自 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`
    

    【讨论】:

      【解决方案3】:

      根据 Mandrill api:

      子帐户

      the unique id of a subaccount for this message - must already exist or will fail with an error.
      

      (至少对我来说,删除该字段后测试开始工作)。 Mandrill 绝对应该改进他们的响应错误。

      【讨论】:

        猜你喜欢
        • 2015-03-15
        • 2018-08-22
        • 2014-03-21
        • 2014-01-28
        • 2015-04-19
        • 2013-09-01
        • 2014-10-08
        • 2016-05-20
        • 2015-02-12
        相关资源
        最近更新 更多