Php 带有收件人变量的MailGun SMTP批发送在“收件人”字段中显示所有收件人

Php 带有收件人变量的MailGun SMTP批发送在“收件人”字段中显示所有收件人,php,email,smtp,mailgun,Php,Email,Smtp,Mailgun,我试图通过SMTP进行批量发送,但即使我向多个收件人发送邮件,并且我已经指定了用户变量(并且这些变量在发送的电子邮件中被成功替换),每个收件人都会出现在收件人处生成的邮件的“收件人:”字段中 根据邮枪关于 警告:在使用批发送时也要使用收件人变量,这一点很重要。这告诉Mailgun向每个收件人发送一封单独的电子邮件,其中只有收件人字段中的电子邮件。如果未使用,所有收件人的电子邮件地址将显示在每个收件人的“收件人”字段中 下面是我的SMTP邮件头的一个示例 To: foo@example.com,

我试图通过SMTP进行批量发送,但即使我向多个收件人发送邮件,并且我已经指定了用户变量(并且这些变量在发送的电子邮件中被成功替换),每个收件人都会出现在收件人处生成的邮件的“收件人:”字段中

根据邮枪关于

警告:在使用批发送时也要使用收件人变量,这一点很重要。这告诉Mailgun向每个收件人发送一封单独的电子邮件,其中只有收件人字段中的电子邮件。如果未使用,所有收件人的电子邮件地址将显示在每个收件人的“收件人”字段中

下面是我的SMTP邮件头的一个示例

To: foo@example.com, bar@example.com
X-Mailgun-Recipient-Variables: {
    "foo@example.com":
    {
        "id":"12345",
        "email":"foo@example.com",
        "first_name":"Foo"
    },
    "bar@example.com":
    {
        "id":"45678",
        "email":"bar@example.com",
        "first_name":"Bar"
    }
}

生成的电子邮件应在“收件人”字段中仅显示一个收件人。我错过了什么吗?

我也没能成功地让它发挥作用。我投了一张邮枪麻烦票。以下是他们反应的要点:

我们文档中的“警告”实际上只针对API,而不是SMTP。这样做的原因是,在使用API时,我们形成/创建电子邮件,并允许我们的服务在“收件人:”字段中为每个收件人分离并创建新的电子邮件。但是,当使用SMTP时,我们只是用提交给我们的服务的内容中继消息,实际上我们并没有从头开始创建消息MIME

要解决此问题,可以在“收件人:”字段中输入%recipient%。这将在与服务器的SMTP会话期间为“RCPT TO”中指定的每个地址创建单独的邮件。现在,这是事情变得有点棘手的地方,因为我对ASP SMTP连接器的不熟悉开始在这里显示出来。在我的研究中,我还没有找到使用ASP SMTP连接器指定RCPT的方法。它似乎依赖于您在to中输入的内容,并且没有提供指定to:字段和RCPT to:字段的方法


当我尝试使用%recipient%作为to变量时,其内置方法会引发错误,
“CDO.Message.1错误'8004020c'至少需要一个收件人,但找不到任何收件人。”
我不熟悉其他邮件程序,但如果有邮件程序允许这种构造,我会感到惊讶。

我昨天开始处理这个问题,我想我已经找到了解决方案

诀窍是将收件人地址保留为空,并将收件人添加到密件抄送行。然后,将自定义标题添加到:%recipient%$mail->send()不会投诉,收到的电子邮件中的收件人:字段仅显示单个收件人的电子邮件

代码示例:

$mail = new PHPMailer();

$mail->isSMTP();
$mail->Host = 'smtp.host';
$mail->SMTPAuth = true;
$mail->Username = 'yourUserName';
$mail->Password = 'yourPassword';
$mail->SMTPSecure = 'tls';

$mail->From = 'email@server.net';
$mail->FromName = 'John Doe';

$mail->addBCC('foo1@bar.com');
$mail->addBCC('foo2@bar.com');

$headerLine = $mail->headerLine('X-Mailgun-Recipient-Variables', '{"foo1@bar.com": {"first":"FooBar1", "id":1}, "foo2@bar.com": {"first":"FooBar2", "id": 2}}');
$mail->addCustomHeader($headerLine);

$headerLine = $mail->headerLine('To','%recipient%');
$mail->addCustomHeader($headerLine);

$mail->Subject = 'Hello, %recipient.first%!';
$mail->Body    = 'Hello %recipient.first%, Your ID is %recipient.id%.';

if(!$mail->send()) 
{
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} 
else 
{
    echo 'Message has been sent';
}

我很好奇,你找到解决办法了吗?@nilsi,还没有。MailGun声称,您必须将
%recipient%
放入“收件人”字段,但无法通过PHP的
mail()
函数使其成功运行,因为它发脾气说它不是电子邮件,并在发送给MailGun之前向其添加内容。有任何更新吗?我在这里和mailgun交谈:但到目前为止运气不好。不幸的是,我不得不放弃使用SMTP,不得不使用API来完成我们的项目。我很想知道是否有解决办法。谢谢。我从MailGun收到了类似的回复,就像你一样,仍然没有成功让
%recipient%
在PHP中的to字段中工作。唉…这对我们有用。。。有点古怪,但它奏效了!谢谢