【问题标题】:How to send and receive emails in mailgun (configured for a subdomain) from the root domain如何在 mailgun(为子域配置)中从根域发送和接收电子邮件
【发布时间】:2016-08-08 14:28:36
【问题描述】:

Mailgun 建议为子域创建 DNS(TXT、MX、..)记录,但声明可以通过以后的配置与根域进行发送和接收。我在注册商和 Mailgun 处为 mail.example.com 创建了所有必要的步骤(添加域、设置路由等)。 我现在可以接收和发送电子邮件到配置的 example@mail.example.com。

我现在必须进行哪些更改才能在 example@example.com 发送和接收? 注册商、mailgun 和我在 gmail 的 smtp 设置(通过 mailgun 从 gmail 发送)有哪些必要的更改?

非常感谢!

【问题讨论】:

    标签: dns mailgun


    【解决方案1】:

    您需要为此使用 mailgun-js

    1. 需要来自 npm 的 mailgun-js

      var Mailgun = require('mailgun-js');

    2.设置mailgun的选项。即 apiKey 和域。

    var options = {
      apiKey: 'YOUR_API_KEY',
      domain: 'YOUR_DOMAIN'
    };
    
    1. 使用这些选项实例化 mailgun。

      var mailgun = new Mailgun(options);

    2. 设置所需参数后发送邮件。

      var data = {
          //From email
          from: '',
          // Email to contact
          to: 'To Email address',
          // CC email
          ccTo: 'CC address if any'
          // Subject
          subject: 'Mail subject',
          // Email msg
          html: 'email message or html'
      };
      
      // Send email
      mailGun.messages().send(data, callbackFunction() {
      
      });
      

    【讨论】:

    • 您实际上并不需要为此使用任何模块(尽管您可以根据需要使用)。发送消息是通过对 Mailgun 端点的 API 调用完成的,您甚至可以使用 curlajax,例如使用 jQuery:$.ajax({ type: 'POST', url: 'https://api.mailgun.net/v3/example.com/messages', username: 'api', password: 'api_key', data: { from: 'hello@example.com', to: 'user@domain.com' ... }, success: callback });(从 jQuery 1.7.2+ 开始),尽管您可能应该考虑从您的服务器发送消息。
    【解决方案2】:

    如果您尝试使用 Django 的 Anymail 包从子域发送 Mailgun 电子邮件,您需要使用 EmailMultiAlternatives 对象发送电子邮件并指定电子邮件发件人域,如下所示:

    from django.core.mail import EmailMultiAlternatives
    
    msg = EmailMultiAlternatives("Subject", "text body",
                                 "contact@example.com", ["to@somedomain.com"])
    msg.esp_extra = {"sender_domain": "mg.example.com"}
    
    msg.send()
    

    【讨论】:

      【解决方案3】:

      如果您为子域配置 Mailgun,您可以通过适当的 to 变量从主域发送电子邮件。例如,使用 Node.js + nodemailer + nodemailer-mailgun-transport

      var nodemailer = require('nodemailer'),
          mg = require('nodemailer-mailgun-transport'),
          auth = { api_key: 'foobar', domain: 'mail.example.com' },
          nodemailerMailgun = nodemailer.createTransport(mg({ auth: auth }));
      
      nodemailerMailgun.sendMail({
          from: 'helloworld@example.com',
          to: 'recipient@domain.com',
          subject: 'Hey you, awesome!',
          text: 'Mailgun rocks, pow pow!'
      }, someCallback);
      

      或者您可以阅读有关通过 API in their docs 发送的其他方法。无论如何,即使您的 Mailgun 配置为子域,您也可以从主域发送电子邮件。

      但是 (!) 您的 MX 记录是为您的子域配置的,因此您只能在那里接收电子邮件。为了能够接收到您的主域的电子邮件,请在 Mailgun 的控制面板中添加您的主域,例如不是mail.example.com,而是example.com,并在你的DNS控制面板中为这个主域进行相应的配置,例如为example.com(不是子域)配置DigitalOcean的DNS:

      TXT    @                v=spf1 include:mailgun.org ~all
      TXT    krs._domainkey   k=rsa; p=MIGfM...blablabla
      CNAME  email            mailgun.org.
      MX     10               mxa.mailgun.org.
      MX     10               mxb.mailgun.org.
      

      请记住,Mailgun 没有邮箱功能,如果您有适当的规则集,它只能转发传入的电子邮件。大多数人将其主域的 MX 记录委托给更易于管理的 ESP,例如 Gmail。 一个域只能有一组 MX 记录,因此您必须选择 Gmail 或 Mailgun。

      【讨论】:

      • 谢谢安东。我是第一次设置这个,所以事情有点棘手。我是否理解正确,如果我想从主域发送,我不能使用 smtp 协议?只有 nodemailer 或他们的 API?
      • 我可以在 domain.com 上为 gmail 设置 MX 记录,通过 gmail 接收电子邮件 @domain.com,然后在 mg.domain.com 上分离 MX 记录以通过 mailgun 接收 @mg.domain.com 电子邮件,可以不是吗?还是整个域只有一组 MX 记录,子域不算?
      【解决方案4】:

      我只使用 Mailgun 的时间很短,但我可以帮助我到目前为止所学到的东西。

      可以为 Mailgun 或 Gmail 等第三方设置您的 DNS 记录。我认为他们不会同时使用两者。我不确定这会对路由产生什么影响,因为它不知道去哪里。

      对于您的 Mailgun 子域,您使用了 mail.example.com 和电子邮件地址 example1@mail.example.com。我的正在运行,但我根本没有创建这样的电子邮件地址。我的电子邮件格式仍然是example1@example.com

      我将从收到的电子邮件中粘贴此内容,并对其进行编辑以匹配您提供的示例:

      看起来您已经为根域 example.com 设置了 MX 记录,但是您与 Mailgun 一起使用的域是 mail.example.com。您需要将主机名从 example.com 更改为 mail.example.com 才能正确路由。

      由于 Mailgun 没有邮箱,因此使用 Mailgun 接收电子邮件需要使用具有指向 Mailgun 的 MX 记录的子域以及使用我们的路由功能。理解路由的一个好方法是作为一种复杂的过滤和转发机制。使用路线,您可以:

      • 将收到的电子邮件转发到另一个环境进行存储(例如电子邮件地址或服务器上的端点
      • 临时存储消息(最多 3 天)并使用 Messages API 检索它
      • 停止处理消息(即丢弃某些消息而不是转发或存储它们)

      【讨论】:

      • 添加评论:我收到了 Mailgun 家伙 Chris 的回复。他说我应该保留服务提供商提供的现有 MX 记录,并为 mg.example.com 域添加一对额外的 MX 记录:一个用于 MXA 记录,一个用于 MXB 记录。 Mailgun 的支持人员真的很棒!
      猜你喜欢
      • 1970-01-01
      • 2017-05-25
      • 2018-04-10
      • 2016-05-11
      • 2017-10-06
      • 1970-01-01
      • 2018-04-24
      • 2016-07-23
      • 1970-01-01
      相关资源
      最近更新 更多