【问题标题】:Unable to send mail via Mailgun over api or smtp无法通过 Mailgun 通过 api 或 smtp 发送邮件
【发布时间】:2017-07-22 14:57:33
【问题描述】:

我设置了一个新帐户,但没有验证我的域。我想在继续验证和添加付款信息之前测试并确认邮件发送。

我已经尝试使用沙盒方法和 api 密钥(包括 smtp)进行 curl。我还尝试使用我的域,使用顶级帐户邮件地址作为收件人。但是每次发送命令(包括 curl 和 smtp)时,我都会收到“Mailgun Magnificent API”响应 - 但没有发送邮件。到目前为止,Mailgun API 看起来并不那么宏伟......我已经多次阅读文档,但找不到我可能做错了什么......

非常感谢任何帮助。

【问题讨论】:

    标签: mailgun


    【解决方案1】:

    通过 php curl 通过 api 发送电子邮件时遇到了同样的问题。我通过将 API Base URL https://api.mailgun.net/v3/YOUR_DOMAIN_NAME 更改为 https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages 解决了这个问题。 这是因为他们的 api 不仅用于发送。 希望这会有所帮助。

    【讨论】:

    • 显然他们需要将我转移到一个更知名的 IP 并且它现在似乎可以工作。虽然我之前犯了不使用“消息”的错误,这是我已经解决的问题之一。
    【解决方案2】:

    对于其他试图弄清楚 “Mailgun Magnificent API” 在 Mailgun HTTP 200-OK API 响应中的含义的人来说,当/some/api/endpoint 无效时,它会在发布到https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/some/api/endpoint 时发生Mailgun API 端点。

    如果您使用的是客户端库,您的 Mailgun 发件人域设置可能存在错误。假设您已经使用 Mailgun 验证了域 mg.example.com。可能导致“Mailgun Magnificent API”的示例(确切的设置名称取决于库):

    • MAILGUN_DOMAIN = mg.example.com # comment——这是 dotenv 文件中的常见错误,通常不支持内联 cmets;将 # comment 移动到自己的行
    • MAILGUN_DOMAIN = mg.example.com/mysite——去掉 /mysite 部分

    如果您直接发布到 Mailgun API(或开发客户端库),您可能会通过其他一些方式获得“Mailgun Magnificent API”:

    • 省略 API 端点:https://api.mailgun.net/v3/mg.example.com(如another 响应中所述)
    • 端点拼写错误:https://api.mailgun.net/v3/mg.example.com/massages(应该是带有 e 的 messages)
    • 在您的域之后包含 #?https://api.mailgun.net/v3/mg.example.com #/messages(请参阅上面关于配置文件中的 cmets 的注释)
    • 在您的域之后包含一个额外路径:https://api.mailgun.net/v3/mg.example.com/route/to/my/app/messages

    请注意,如果 YOUR_DOMAIN_NAME 不是您在 Mailgun 中注册的有效发送域,您将不会看到“Mailgun Magnificent API”。 (在这种情况下,Mailgun 会响应 404-Not Found)。

    【讨论】:

    • 非常感谢。我只是没有取消注释 MAILGUN_DOMAIN 和 KEY。 :-)
    【解决方案3】:

    mailgun 指南显示您使用 https://api.mailgun.net/v3/YOUR_DOMAIN 作为 YOUR_DOMAIN_NAME,如下面的 sn-p 和 这是问题所在

    如果您使用的是 mailgun-js,您只需将 YOUR_DOMAIN 作为 YOUR_DOMAIN_NAME。

    不需要 https://api.mailgun.net/v3 部分

    const API_KEY = 'YOUR_API_KEY';
    const DOMAIN = 'YOUR_DOMAIN_NAME';
    const mailgun = require('mailgun-js')({apiKey: API_KEY, domain: DOMAIN});
    
    const data = {
      from: 'Excited User <me@samples.mailgun.org>',
      to: 'foo@example.com, bar@example.com',
      subject: 'Hello',
      text: 'Testing some Mailgun awesomeness!'
    };
    
    mailgun.messages().send(data, (error, body) => {
      console.log(body);
    });

    【讨论】:

      【解决方案4】:

      对我来说,问题是没有在 url 中包含我的域名,而是试图将所有内容都输入到一行中。严格按照他们的在线示例。键入反斜杠会将光标移至新行。

      $ curl -s --user 'api:key-xxx' \
      https://api.mailgun.net/v3/your_domain/messages \
      -F from='User <user@sample.mailgun.org>' \
      -F to='xxx@gmail.com' \
      -F subject='Hello' \
      -F text='Testing some mailgun!'
      

      回应

      {
        "id": "<xxx.x.xxx@your_domain>",
        "message": "Queued. Thank you."
      }
      

      【讨论】:

        【解决方案5】:

        在消息 url 部分末尾包含斜杠“/”也会导致此失败。

        例如,如果您在 c# 中使用像 Refit 这样的库,请确保您的服务接口声明如下(请参阅 Post 属性):

        public interface IMailgunService
        {
            [Post("")]
            Task<JsonDocument> SendEmailAsync([Body(BodySerializationMethod.UrlEncoded)] Dictionary<string, object> data);
        }
        

        【讨论】:

          猜你喜欢
          • 2013-11-28
          • 2021-05-12
          • 1970-01-01
          • 2014-03-05
          • 1970-01-01
          • 2015-05-20
          • 2020-02-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多