【问题标题】:Can I send email with mailgun sandbox domain under my local OS?我可以在本地操作系统下使用 mailgun 沙箱域发送电子邮件吗?
【发布时间】:2021-09-10 00:33:43
【问题描述】:

我在 mailgun 注册了自己用于我的 laravel 应用程序的域

我还看到我的域有沙盒域,看起来像:

sandboxdXXXXXXXXXXXXXXXXXXXX.mailgun.org

在 SMTP 块下我看到文本: 获取您的 SMTP 凭据:

SMTP hostname: smtp.mailgun.org
Port: 587 (recommended)
Username: postmaster@sandboxdXXXXXXXXXXXXXXXXXXXX.mailgun.org
Default password: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXX

在我的本地操作系统上工作,ubuntu 18 下的 apache 2 我尝试在本地的 .env 中发送电子邮件:

MAIL_DRIVER=mailgun
MAIL_HOST=smtp.mailgun.org
MAIL_PORT=587
MAIL_USERNAME=postmaster@sandboxdXXXXXXXXXXXXXXXXXXXX.mailgun.org
MAIL_PASSWORD=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXX
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS='from_email@site.com'
MAIL_FROM_NAME='FROM NAME'
MAILGUN_SECRET='XXXXXX-XXXXXXX'
MAILGUN_DOMAIN='sandboxdXXXXXXXXXXXXXXXXXXXX.mailgun.org'

结果我发送的电子邮件没有错误,但我没有收到我的 2 个用户的电子邮件,这些用户在 mailgun 的授权收件人中。

对于这个沙盒域,我可以将它用于本地操作系统吗?我可以在本地操作系统下发送电子邮件吗?

更新: 在我的本地 .env 中,我设置了 mailtrap.io 参数,它工作正常。

在帐户安全->API 安全->我的 mailgun 帐户的 API 密钥中,我有参数 L

Private API key 
Public validation key 
HTTP webhook signing key

在远程开发服务器上设置应用程序

MAIL_MAILER=smtp
MAIL_DRIVER=mailgun
MAIL_HOST=smtp.mailgun.org
MAIL_PORT=587
MAIL_USERNAME=XXX
MAIL_PASSWORD=XXX
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS='from_email@site.com'
MAIL_FROM_NAME='FROM NAME'

如果 MAIL_USERNAME 和 MAIL_PASSWORD 必须填写来自 Account Security->API security->API 密钥的值 如果 MAIL_FROM_ADDRESS 必须是我之前在设置中创建的授权收件人之一?

更新区块 2: 我尝试从实时域中填充参数,但失败了。 我在这里搜索参数:https://prnt.sc/18ouojv ?

提前致谢!

【问题讨论】:

  • 如果你真的已经注册了你的域,你不应该使用沙盒域(我只是遇到了问题)。如果您想从您的真实域名开始,请告诉我...
  • 请看更新
  • 你还没有回答我的问题。我无法在沙盒域方面为您提供帮助,但是 - 也许 - 使用您的真实帐户和真实域......
  • 我尝试使用实时域。请检查更新的块 2。

标签: laravel sandbox mailgun


【解决方案1】:

我不会使用沙盒域,因为它有问题,不能像真正的域那样工作,并且没有理由不从 real 域开始免费。
使用您自己的域开始使用 MailGun 的简短说明:

  • 在 mailgun 创建一个帐户包括信用卡
    -> 如果不添加信用卡,将无法使用MG
    -> 这并不意味着你必须支付,除非你没有达到限制
    每月 5,000 封电子邮件
  • 在 MG 中添加您的(现有)域(仅当您添加了 CC 时才可能)
    在“发送”下 - 按钮“添加新域”(该按钮仅在添加 CC 时可见)
  • 完全按照右上角显示的步骤操作
    在 MG 门户中。标题“开始”
    您必须达到 100% 才能发送您的第一封电子邮件
    注意:
    这还包括“不合逻辑”的步骤——例如发送电子邮件至 mailgun@YourDomain
    虽然,邮箱“mailgun”不存在
    您还必须向自己发送电子邮件
    在 MG 进行初始验证似乎需要这些步骤
  • 准确将 MG 门户(spf 和 mta)中的 DNS 条目添加到您的域
    为此,您需要访问您的域提供商的门户
  • 在 MG 中 - 在 DNS 记录下 - 按下按钮“验证 DNS 设置”
    DNS 设置必须经过验证(显示绿色勾号),然后才能发送电子邮件
  • 如果一切正常,您将收到一封来自 MG 的电子邮件:
    好消息!您为 YourDomain 添加的 DNS 设置已经过验证。
  • 如果您收到此邮件,您应该可以通过 MG 发送邮件

开发的进一步说明(我使用 Visual Studio 2017、Windows Forms 和 vb.net):
我必须设置 TLS 1.2 才能连接:
vb.net代码:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12

我还添加了 NuGet 包:RestSharp(因为 MG 中的代码示例基于 RestSharp)。
vb.net 的代码示例(将 NuGet 添加到 RestSharp 后):

    Imports System.Net
    Imports System.Net.Mail
    Imports RestSharp
    Imports RestSharp.Authenticators 
    ...
    Dim client As RestClient = New RestClient()
    client.BaseUrl = New Uri("https://api.eu.mailgun.net/v3/")
    Dim cAPIKey As String = "YourKey from MG"
    client.Authenticator = New HttpBasicAuthenticator("api", cAPIKey)
    Dim request As RestRequest = New RestRequest()
    request.AddParameter("domain", "YourDomain", ParameterType.UrlSegment)
    request.Resource = "{domain}/messages"
    request.AddParameter("from", "Your Description <Mailbox@YourDomain>")
   ' add mail address(es): 
     request.AddParameter("to", "mail-address1")
   ' further, if needed  (Note: I send a single email to each recipient): 
     request.AddParameter("to", "mail-address2")
   ' add bcc mail address (if needed): 
     request.AddParameter("bcc", "bcc-mail-address")
   ' fill the mail:   
     request.AddParameter("subject", cMailBetreff)
     request.AddParameter("html", cHTMLMailBody)
     request.Method = Method.POST
     Dim status As IRestResponse
     status = client.Execute(request)
   ' state handling:     
     If status.StatusCode.ToString = "OK" Then
      ' O.K handling
     Else
       ' Error handling
     End If

以上代码注释:
我发送了一个复杂的 html,我将其存储在一个文件中,该文件加载到变量 cHTMLMailBody 中。
加载后,文件中的一些变量会更改为存储在 SQL 服务器上的客户值(cMailBetreff 还包含客户特定的生成文本)。
因为我不是来自美国,所以我必须使用网址:https://api.eu.mailgun.net/v3/"
如果您来自美国,则必须使用其他网址(请参阅 MG 门户)。

MG中错误处理的注意事项(登录MG):
我已经用上面的代码做了一些测试(有效)。 我也想知道(和存储),如果发送的电子邮件已经到达收件人,我已经做了一些测试并将电子邮件发送到一个不存在的域和一个现有的域,但不是现有的邮箱。
对于不存在的域,在 MG 中记录了一个错误(什么是正确的)。 对不存在的邮箱,在MG中登录状态OK(什么是错误)。 不存在邮箱的错误状态(OK)的原因是,如果没有指向 MG 服务器的域的 MX 记录,则 MG 不会收到未投递邮件。 由于我们(手动)也从我们自己的邮件服务器向域发送电子邮件,所以我不想将 mx 记录更改为我们的域,通常是 MG 服务器。
因此,我向我们的域(在 MG 和我们的 DNS 提供商处)添加了一个子域,然后向指向 MG 的新子域添加了一条 MX 记录服务器。
然后,我将 domain 参数更改为 SubDomain.Domain:

  request.AddParameter("domain", "SD.Domain", ParameterType.UrlSegment)

然后的问题是,在标题中自动生成了一个不好的“代表”。 我能够通过添加更多参数来解决这个问题:

    request.AddParameter("h:sender", "Your Description <Mailbox@YourDomain>")

(与 from 参数中的值相同,需要 h: ) 这样做之后,MG 还会收到未送达的电子邮件,并在不存在的邮箱中添加一个错误。

所以.. 如果您需要获取/存储已发送电子邮件的状态并且不想将您的 mx 记录一般更改为 MG,您应该添加一个子域(如果没有,您不应该需要一个子域)域)。

对我来说,现在似乎一切正常:

  • 我们可以通过 MG 发送 html 邮件
  • 我们可以通过 MG API 捕获已发送电子邮件的状态
  • 我们仍然可以通过我们自己的邮件服务器发送(手动)电子邮件
    重要的是:
  • 如果收件人回复电子邮件,则回复将发送到我们的服务器上的我们的邮箱

希望这对某人有所帮助...

【讨论】:

    【解决方案2】:

    由于沙盒域仅限于授权收件人。因此请确保验证收件人的电子邮件

    https://app.mailgun.com/app/sending/domains

    如果收件人没有收到电子邮件到收件箱,请检查垃圾邮件 文件夹。

    参考:https://help.mailgun.com/hc/en-us/articles/360011702394-Why-Do-My-Emails-Go-to-Spam-

    如果还是不行,那就把mailer改成smtp

    MAIL_MAILER=smtp
    

    然后运行

    php artisan config:clear
    

    环境

    MAIL_MAILER=smtp
    MAIL_HOST=smtp.mailgun.org
    MAIL_PORT=587
    MAIL_USERNAME=postmaster@sandbox**************.mailgun.org
    MAIL_PASSWORD=************************
    MAIL_ENCRYPTION=tls
    MAIL_FROM_ADDRESS=youraccountemailaddress
    MAIL_FROM_NAME="${APP_NAME}"
    

    【讨论】:

    • 请看更新
    • @PetroGromovo 更新答案 .MAIL_FROM_ADDRESS 是登录 mailgun 的帐户电子邮件
    • 谢谢!当我现在尝试在远程服务器上使用我的域(不是沙箱)时,您能否解释一下参数 MAIL_USERNAME 和 MAIL_PASSWORD 必须如何填写?
    • @PetroGromovo.i has not used domain at.only sandbox used.try using domain email as username and domain email password as password and from address as domain email
    • 我尝试使用实时域。请检查更新的块 2。
    猜你喜欢
    • 1970-01-01
    • 2020-07-16
    • 2017-10-12
    • 2020-05-01
    • 2011-05-26
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多