繁体   English   中英

php mail()电子邮件发送到gmail帐户,但不在常规电子邮件帐户中

[英]Php mail() email sendouts arriving in gmail account but not in regular email accounts

我有一个php脚本,一旦人们提交了一些信息,该脚本就会发送带有附件的电子邮件。 我在Gmail收件箱中收到的这些电子邮件没有问题。 但是,当我使用个人电子邮件地址或工作电子邮件地址时,电子邮件永远不会传递。 这是我的脚本(以下)或服务器上的某些设置有问题吗? 我认为标题可能有问题,但是每次更改标题时,它们都会破坏电子邮件,并且一切都出现在邮件正文中。 有谁知道如何解决这一问题? 该服务器是具有plesk控制面板的客户端管理的linux服务器,因此我无权访问php ini文件。

//define the receiver of the email
$to = 'test@test.com';
//define the subject of the email
$subject = 'Email with Attachment';
//create a boundary string. It must be unique
//so we use the MD5 algorithm to generate a random hash
$random_hash = md5(date('r', time()));
//define the headers we want passed. Note that they are separated with \r\n
$mime_boundary = "<<<--==+X[".md5(time())."]";

$path = $_SERVER['DOCUMENT_ROOT'].'/two/php/';
$fileContent =  chunk_split(base64_encode(file_get_contents($path.'CTF_brochure.pdf')));


$headers .= "From: info@example.org.uk <info@poundsandpennies.org.uk>\r\n";  

$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed;\r\n";
$headers .= " boundary=\"".$mime_boundary."\"";




$message = "This is a multi-part message in MIME format.\r\n";

$message .= "\r\n";
$message .= "--".$mime_boundary."\r\n";

$message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
$message .= "Content-Transfer-Encoding: 7bit\r\n";
$message .= "\r\n";
$message .= "Email content and what not: \r\n";
$message .= "This is the file you asked for! \r\n";
$message .= "--".$mime_boundary."" . "\r\n";

$message .= "Content-Type: application/octet-stream;\r\n";
$message .= " name=\"CTF-brochure.pdf\"" . "\r\n";
$message .= "Content-Transfer-Encoding: base64 \r\n";
$message .= "Content-Disposition: attachment;\r\n";
$message .= " filename=\"CTF_brochure.pdf\"\r\n";
$message .= "\r\n";
$message .= $fileContent;
$message .= "\r\n";
$message .= "--".$mime_boundary."\r\n";

//send the email
$mail_sent = mail($to, $subject, $message, $headers);
//if the message is sent successfully print "Mail sent". Otherwise print "Mail failed"
echo $mail_sent ? "Mail sent" : "Mail failed";

尝试此多部分替代版本。 它接受纯文本和html消息,并允许邮件客户端选择要显示的内容。


//define the receiver of the email
$to = 'test@test.com';
//define the subject of the email
$subject = 'Email with Attachment';
//create 2 boundary strings. They must be unique
$boundary1 = rand(0,9)."-"
                            .rand(10000000000,9999999999)."-"
                            .rand(10000000000,9999999999)."=:"
                            .rand(10000,99999);
$boundary2 = rand(0,9)."-".rand(10000000000,9999999999)."-"
                            .rand(10000000000,9999999999)."=:"
                            .rand(10000,99999);

$path = $_SERVER['DOCUMENT_ROOT'].'/two/php/';
$fileContent =  chunk_split(base64_encode(file_get_contents($path.'CTF_brochure.pdf')));

$txt_message = "Email content and what not: \r\n";
$txt_message .= "This is the file you asked for! \r\n";

$html_message = "Email content and what not: <br />";
$html_message .= "This is the file you asked for! ";

$headers     =<<<AKAM
From: info@example.org.uk <info@poundsandpennies.org.uk>
MIME-Version: 1.0
Content-Type: multipart/mixed;
    boundary="$boundary1"
AKAM;

$attachment = <<<ATTA
--$boundary1
Content-Type: application/octet-stream;
    name="CTF_brochure.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
    filename="CTF_brochure.pdf"

$fileContent

ATTA;

$body = <<<AKAM
This is a multi-part message in MIME format.

--$boundary1
Content-Type: multipart/alternative;
    boundary="$boundary2"

--$boundary2
Content-Type: text/plain;
    charset=ISO-8859-1;
Content-Transfer-Encoding: 7bit

$txt_message
--$boundary2
Content-Type: text/html;
    charset=ISO-8859-1;
Content-Transfer-Encoding: 7bit

$html_message

--$boundary2--

$attachment
--$boundary1--
AKAM;

//send the email
$mail_sent = @mail($to, $subject, $body, $headers);
//if the message is sent successfully print "Mail sent". Otherwise print "Mail failed"
echo $mail_sent ? "Mail sent" : "Mail failed";

检查其他帐户上的垃圾邮件文件夹。 有时,如果电子邮件帐户提供商使用的任何垃圾邮件过滤软件触发了太多警告,则邮件可能最终成为垃圾邮件。

mail()函数非常有用,除了您必须处理标头时。 没有适当标题的垃圾邮件机器人将拒绝大多数电子邮件。

我建议使用PHPMailer类,并完成所有工作。 自己做是一种痛苦,不建议这样做。

https://github.com/PHPMailer/PHPMailer

它具有许多出色的功能,可以挽救所有这些问题的生命:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM