无法向抄送收件人发送电子邮件
Cannot send emails to CC recipients
我已经搜索过关于这个问题的类似重复内容,但没有任何效果。
这是我用来自动发送电子邮件的代码。我已经发起数据和方法如下,
<?php
$reportdate=date('Y-m-d',strtotime("-1 days"));
$To = 'abc@gmail.com';
$Cc = 'xyz@dialog.lk';
$Subject = 'Data as at '.$reportdate;
//this functin processes the server return codes and generates errors if needed
function server_parse($socket, $expected_response)
{
$server_response = '';
while (substr($server_response, 3, 1) != ' ')
{
if (!($server_response = fgets($socket, 256)))
echo 'Couldn\'t get mail server response codes. Please contact the forum administrator.', __FILE__, __LINE__;
//exit;
}
if (!(substr($server_response, 0, 3) == $expected_response))
echo 'Unable to send e-mail. Please contact the forum administrator with the following error message reported by the SMTP server: "'.$server_response.'"', __FILE__, __LINE__;
//exit;
}
//
// This function was originally a part of the phpBB Group forum software phpBB2 (http://www.phpbb.com).
// They deserve all the credit for writing it. I made small modifications for it to suit PunBB and it's coding standards.
// -------> This message is from punBB developer
//
function smtp_mail($to,$cc, $subject, $message, $headers = '')
{
$recipients = explode(',', $to);
$recipientscc = explode(',', $cc);
$user = '<your mail id>';
$pass = '<your password>';
$smtp_host = 'xxx@dy.lk';
$smtp_port = 25;
if (!($socket = fsockopen($smtp_host, $smtp_port, $errno, $errstr, 15)))
echo "Could not connect to smtp host '$smtp_host' ($errno) ($errstr)", __FILE__, __LINE__;
server_parse($socket, '220');
fwrite($socket, 'EHLO '.$smtp_host."\r\n");
server_parse($socket, '250');
// fwrite($socket, 'AUTH LOGIN'."\r\n");
// server_parse($socket, '334');
// fwrite($socket, base64_encode($user)."\r\n");
// server_parse($socket, '334');
// fwrite($socket, base64_encode($pass)."\r\n");
// server_parse($socket, '235');
fwrite($socket, 'MAIL FROM: <sss@xc.lk>'."\r\n");
server_parse($socket, '250');
foreach ($recipients as $email)
{
fwrite($socket, 'RCPT TO: <'.$email.'>'."\r\n");
server_parse($socket, '250');
}
fwrite($socket, 'DATA'."\r\n");
server_parse($socket, '354');
// fwrite($socket, 'Subject: '.$subject."\r\n".'To: <'.implode('>, <', $recipients).'>'."\r\n".$headers."\r\n\r\n".$message."\r\n");
//fwrite($socket, 'Subject: '.$subject."\r\n".'To: <'.implode('>, <', $recipients).'>'."\r\n".'cc: <'.implode('>, <', $recipientscc).'>'."\r\n".$headers."\r\n\r\n".$message."\r\n");
fwrite($socket, 'Subject: '.$subject."\r\n".'To: <'.implode('>, <', $recipients).'>'."\r\n".'cc: <'.implode('>, <', $recipientscc).'>'."\r\n".$headers."\r\n\r\n".$message."\r\n");
fwrite($socket, '.'."\r\n");
server_parse($socket, '250');
fwrite($socket, 'QUIT'."\r\n");
fclose($socket);
return true;
}
$headers= "MIME-Version: 1.0" . "\r\n";
$headers.= "Content-type: text/html; charset=iso-8859-1" . "\r\n";
$headers.= "From: <cc@xyz.lk>" . "\r\n";
$messagenew='Dear All,';
$messagenew.=nl2br(" \r\n \r\n");
$messagenew.=nl2br(" \r\n \r\n");
$messagenew.='Best Regards,';
$messagenew.=nl2br(" \r\n");
$messagenew.='This is an automated email, Please do not reply ... ';
// Send the mail
if(smtp_mail($To,$Cc, $Subject, $messagenew, $headers))
{
$pieces = explode(",", $To);
$NumofMails=count($pieces);
}
else
{
echo "Some error occurred";
}
?>
这很好用。但我没有收到任何电子邮件给抄送收件人。有人可以帮我吗?我也试过更换 headers。但是,当我将所有抄送收件人复制到 $TO 时,这也能正常工作。
郑重声明,我不是 SMTP 协议方面的专家,但是您似乎没有实际发送 CC 收件人。
尝试像这样添加另一个 foreach 循环:
foreach ($recipients as $email)
{
fwrite($socket, 'RCPT TO: <'.$email.'>'."\r\n");
server_parse($socket, '250');
}
foreach ($recipientscc as $email)
{
fwrite($socket, 'RCPT TO: <'.$email.'>'."\r\n");
server_parse($socket, '250');
}
根据对此事的快速 google 搜索,'To'、'CC' 和 'BCC' 之间的区别实际上就在于 headers,就像主题一样。
我找到的详情请参考https://mailtrap.io/blog/cc-bcc-in-smtp/。 (不多,但也有)
我已经搜索过关于这个问题的类似重复内容,但没有任何效果。
这是我用来自动发送电子邮件的代码。我已经发起数据和方法如下,
<?php
$reportdate=date('Y-m-d',strtotime("-1 days"));
$To = 'abc@gmail.com';
$Cc = 'xyz@dialog.lk';
$Subject = 'Data as at '.$reportdate;
//this functin processes the server return codes and generates errors if needed
function server_parse($socket, $expected_response)
{
$server_response = '';
while (substr($server_response, 3, 1) != ' ')
{
if (!($server_response = fgets($socket, 256)))
echo 'Couldn\'t get mail server response codes. Please contact the forum administrator.', __FILE__, __LINE__;
//exit;
}
if (!(substr($server_response, 0, 3) == $expected_response))
echo 'Unable to send e-mail. Please contact the forum administrator with the following error message reported by the SMTP server: "'.$server_response.'"', __FILE__, __LINE__;
//exit;
}
//
// This function was originally a part of the phpBB Group forum software phpBB2 (http://www.phpbb.com).
// They deserve all the credit for writing it. I made small modifications for it to suit PunBB and it's coding standards.
// -------> This message is from punBB developer
//
function smtp_mail($to,$cc, $subject, $message, $headers = '')
{
$recipients = explode(',', $to);
$recipientscc = explode(',', $cc);
$user = '<your mail id>';
$pass = '<your password>';
$smtp_host = 'xxx@dy.lk';
$smtp_port = 25;
if (!($socket = fsockopen($smtp_host, $smtp_port, $errno, $errstr, 15)))
echo "Could not connect to smtp host '$smtp_host' ($errno) ($errstr)", __FILE__, __LINE__;
server_parse($socket, '220');
fwrite($socket, 'EHLO '.$smtp_host."\r\n");
server_parse($socket, '250');
// fwrite($socket, 'AUTH LOGIN'."\r\n");
// server_parse($socket, '334');
// fwrite($socket, base64_encode($user)."\r\n");
// server_parse($socket, '334');
// fwrite($socket, base64_encode($pass)."\r\n");
// server_parse($socket, '235');
fwrite($socket, 'MAIL FROM: <sss@xc.lk>'."\r\n");
server_parse($socket, '250');
foreach ($recipients as $email)
{
fwrite($socket, 'RCPT TO: <'.$email.'>'."\r\n");
server_parse($socket, '250');
}
fwrite($socket, 'DATA'."\r\n");
server_parse($socket, '354');
// fwrite($socket, 'Subject: '.$subject."\r\n".'To: <'.implode('>, <', $recipients).'>'."\r\n".$headers."\r\n\r\n".$message."\r\n");
//fwrite($socket, 'Subject: '.$subject."\r\n".'To: <'.implode('>, <', $recipients).'>'."\r\n".'cc: <'.implode('>, <', $recipientscc).'>'."\r\n".$headers."\r\n\r\n".$message."\r\n");
fwrite($socket, 'Subject: '.$subject."\r\n".'To: <'.implode('>, <', $recipients).'>'."\r\n".'cc: <'.implode('>, <', $recipientscc).'>'."\r\n".$headers."\r\n\r\n".$message."\r\n");
fwrite($socket, '.'."\r\n");
server_parse($socket, '250');
fwrite($socket, 'QUIT'."\r\n");
fclose($socket);
return true;
}
$headers= "MIME-Version: 1.0" . "\r\n";
$headers.= "Content-type: text/html; charset=iso-8859-1" . "\r\n";
$headers.= "From: <cc@xyz.lk>" . "\r\n";
$messagenew='Dear All,';
$messagenew.=nl2br(" \r\n \r\n");
$messagenew.=nl2br(" \r\n \r\n");
$messagenew.='Best Regards,';
$messagenew.=nl2br(" \r\n");
$messagenew.='This is an automated email, Please do not reply ... ';
// Send the mail
if(smtp_mail($To,$Cc, $Subject, $messagenew, $headers))
{
$pieces = explode(",", $To);
$NumofMails=count($pieces);
}
else
{
echo "Some error occurred";
}
?>
这很好用。但我没有收到任何电子邮件给抄送收件人。有人可以帮我吗?我也试过更换 headers。但是,当我将所有抄送收件人复制到 $TO 时,这也能正常工作。
郑重声明,我不是 SMTP 协议方面的专家,但是您似乎没有实际发送 CC 收件人。
尝试像这样添加另一个 foreach 循环:
foreach ($recipients as $email)
{
fwrite($socket, 'RCPT TO: <'.$email.'>'."\r\n");
server_parse($socket, '250');
}
foreach ($recipientscc as $email)
{
fwrite($socket, 'RCPT TO: <'.$email.'>'."\r\n");
server_parse($socket, '250');
}
根据对此事的快速 google 搜索,'To'、'CC' 和 'BCC' 之间的区别实际上就在于 headers,就像主题一样。
我找到的详情请参考https://mailtrap.io/blog/cc-bcc-in-smtp/。 (不多,但也有)