无法通过 api 或 smtp 通过 Mailgun 发送邮件

Unable to send mail via Mailgun over api or smtp

我已经设置了一个新帐户,但尚未验证我的域。在进行验证和添加付款信息之前,我想测试并确认邮件发送。

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

非常感谢任何帮助。

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

对于任何其他试图弄清楚 "Mailgun Magnificent API" 在 Mailgun HTTP 200-OK API 响应中意味着什么的人,它发生在发布到 https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/some/api/endpoint/some/api/endpoint 不是有效的 Mailgun API 端点时。

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

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

如果您直接向 Mailgun API 发帖(或开发客户端库),您还可以通过其他一些方式获得 "Mailgun Magnificent API":

  • 省略 API 端点:https://api.mailgun.net/v3/mg.example.com(如 响应中所述)
  • 拼写错误的端点:https://api.mailgun.net/v3/mg.example.com/massages(应该是 messages with e
  • 在您的域后添加 #?https://api.mailgun.net/v3/mg.example.com #/messages(请参阅上面关于配置文件中注释的说明)
  • 在您的域名后添加一个额外的路径: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 指南向您展示如何使用 https://api.mailgun.net/v3/YOUR_DOMAIN 作为 YOUR_DOMAIN_NAME,如下面的代码片段和 this是问题.

如果您使用的是 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);
});

我的问题是没有在 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."
}

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

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

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