什么';这是php发送的电子邮件中消息Id的问题

什么';这是php发送的电子邮件中消息Id的问题,php,email,smtp,zend-mail,Php,Email,Smtp,Zend Mail,我有php发送到gmail帐户的可疑邮件id头: Message-Id: <5100054f.a489440a.5d93.6a70SMTPIN_ADDED_MISSING@mx.google.com> 我想我没有在Zend_邮件中设置此标题。是什么生成了这个标题?您是否看到此标题有任何问题?如果缺少,Google SMTP将生成此标题。此标头必须由第一个SMTP服务器设置。所以你不生成它-谷歌生成。它用于防止多次传递并将相关消息链接在一起 不需要设置邮件id标头,但对于大多数(但不

我有php发送到gmail帐户的可疑邮件id头:

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

我想我没有在Zend_邮件中设置此标题。是什么生成了这个标题?您是否看到此标题有任何问题?

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


不需要设置邮件id标头,但对于大多数(但不是全部,仅配置)smtp来说,添加(可能是修复)此标头是一种很好的做法。因此,为了避免他人生成此标题,您可以自己生成。

发送电子邮件时,适当的出站电子邮件客户端应该生成
消息ID
标题。谷歌表现得很好,当邮件通过它的电子邮件系统时,它会为你生成邮件,但大多数不会,而且大多数垃圾邮件过滤器会将丢失的邮件头视为邮件更可能是垃圾邮件的指示。任何格式错误或缺少的标题都将添加到“垃圾邮件分数”

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

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

给出:

1358961017-677533f745f613447d06de25e7fa4d32@yourdomain.com

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

我使用以下命令修复MessageId:

$mail->MessageID =sprintf('<%s@%s>', $myMessageID, 'myserver');
$mail->MessageID=sprintf(“”,$myMessageID,'myserver');
这一行对我很有用(我还在标题中添加了一行“日期”,因为这对我来说也是一个垃圾邮件问题)。基于

以下是我的PHP数组方法(使用Pear的邮件和Mime库):

$headers=数组(
'From'=>$From,
“主题”=>$Subject,
'至'=>$至,
“Cc'=>”,
'Date'=>Date('r'),
'消息ID'=>sprintf(“,
基本转换(微时间(),10,36),
基本转换(bin2hex(openssl随机伪字节(8)),16,36),
'yourdomain.com')
);

请注意,使用
$\u SERVER['SERVER\u NAME']
而不是字面上的
'yourdomain.com'
在php cli中不起作用,正如Oleg在另一个答案中所评论的那样。

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

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

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

注意-我在任何时候都不能定义电子邮件头
消息id
事实上,我使用的golang repo没有api调用来定义该头您错过了“”括号。

我应该从php设置还是服务器smpt服务器添加它们?消息_id是否应该包含发送地址如下的服务器域:8D1C1FD-3C35-4568-925C-FC46CAC0DE8A@sendinghost.com?您的意思是,如果发送的电子邮件中没有邮件id,则接收电子邮件时会生成该id并将其添加到邮件中?SMTP服务器会在该id不存在时生成该id。不需要从PHP生成。它包括@domain部分。建议如果我发送邮件的SMTP服务器生成邮件,为什么它会设置发送邮件的google域而不是SMTP域。是否可以将SMTP服务器配置为自动添加邮件id以不在应用程序中发送邮件?是否意味着缺少邮件id会增加发送垃圾邮件的机会?邮件id是否包含smpt域发送电子邮件的服务器?smpt服务器不会自动添加邮件id,它应该从应用程序中添加,对吗?就像我说的,“任何格式错误或缺少的标题都会添加到“垃圾邮件分数”中”。SMTP服务器应该添加它,但您的显然不是。是否可以将SMTP服务器配置为自动添加邮件id以不在应用程序中发送?
$mail->MessageID =sprintf('<%s@%s>', $myMessageID, 'myserver');
$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')
                );
Message ID  <5be55db9.1c69fb81.d0444.d894SMTPIN_ADDED_MISSING@mx.google.com>
Message ID  <20181109163255.F164D8E9588@mail.myexample.com>