17

我有 php 发送到 gmail 帐户的电子邮件的可疑 message-id 标头:

Message-Id: <5100054f.a489440a.5d93.6a70SMTPIN_ADDED_MISSING@mx.google.com>

你能告诉它有这种奇怪的格式吗? SMTPIN_ADDED_MISSING 在这里是什么意思?我在互联网上看到的示例具有类似这样的格式,其中包含发送域,但由于某种原因我的消息 ID 不包含它:

38D1C1FD-3C35-4568-925C-FC46CAC0DE8A@sendinghost.com

我不认为我在 Zend_Mail 中设置了这个标题。是什么产生了这个标题?你看到这个标题有什么问题吗?

4

6 回答 6

22

发送电子邮件时,适当的出站电子邮件客户端应生成Message-ID标头。当邮件通过其电子邮件系统时,Google 会为您生成它,但大多数人不会,并且大多数垃圾邮件过滤器会将此丢失的标题视为该邮件更有可能是垃圾邮件的指示。任何格式错误或丢失的标头都将添加到“垃圾邮件分数”中。

生成并不难,所需要的只是每个消息都是唯一的:

$message-id = time() .'-' . md5($sender . $recipient) . '@' $_SERVER['SERVER_NAME'];

或者

$message-id = time() .'-' . md5($sender . $recipient) . '@yourdomain.com';

给出:

1358961017-677533f745f613447d06de25e7fa4d32@yourdomain.com
于 2013-01-23T17:19:18.987 回答
8

如果丢失,Google SMTP 会生成它。此标头必须由第一个 SMTP 服务器设置。所以你不会生成它 - 谷歌会。它用于防止多次传递并将相关消息链接在一起。

不需要设置消息 id 标头,但对于大多数(但不是全部,仅配置)smtp 添加(可能是修复)此标头是一个好习惯。因此,为避免其他人生成此标头,您可以自己生成它。

于 2013-01-23T16:53:50.423 回答
3

这个对我有用(我还在标题中添加了一个“日期”行,因为这对我来说也是一个垃圾邮件问题)。基于这种和平的代码

这是我的 PHP 数组方法(使用 Pear 的 Mail 和 Mime 库):

$headers = array(
   'From'       => $from,
   'Subject'    => $subject,
   'To'     => $to,
   'Cc'     => '',
   'Date'       => date('r'),
   'Message-ID' => sprintf("<%s.%s@%s>",
                                base_convert(microtime(), 10, 36),
                                base_convert(bin2hex(openssl_random_pseudo_bytes(8)), 16, 36),
                                'yourdomain.com')
                );

请注意,正如 Oleg 在另一个答案中注释掉的那样,使用$_SERVER['SERVER_NAME']而不是字面意思在 php cli 中不起作用。'yourdomain.com'

于 2018-07-26T05:38:58.357 回答
0

我正在使用相同的 MessageId 来跟踪交换的消息。

我用以下方法修复 MessageId:

$mail->MessageID =sprintf('<%s@%s>', $myMessageID, 'myserver');
于 2015-07-20T02:07:44.897 回答
0

您错过了“<”和“>”括号。

于 2020-06-16T18:54:19.653 回答
0

tl;博士; 发送电子邮件时不要使用端口 25,而是使用端口 587

当我使用端口 25 从我自定义创建的 golang 电子邮件客户端发送出站电子邮件到我的本地后缀服务器时,我看到的目标电子邮件地址是 gmail 或 google gsuite 地址

Message ID  <5be55db9.1c69fb81.d0444.d894SMTPIN_ADDED_MISSING@mx.google.com>

从 gmail 中的目标电子邮件地址查看Show Original...但是,由于我在我的 golang 电子邮件客户端和本地 postfix 服务器中都使用了完整的 TLS 证书,所以当我在出站电子邮件客户端中使用安全端口 587 替换使用端口 25 时(postfix 已经使用 TLS 证书)然后我得到正确的

Message ID  <20181109163255.F164D8E9588@mail.myexample.com>

注意 - 我从来没有定义电子邮件标头message-id,因为我使用的 golang 存储库没有定义该标头的 api 调用

于 2018-11-09T16:52:42.400 回答