【问题标题】:Email is not coming in Gmail inbox using this php code [duplicate]电子邮件未使用此 php 代码进入 Gmail 收件箱 [重复]
【发布时间】:2016-10-10 06:30:20
【问题描述】:

我在 html 网站中使用此代码作为我的联系表单,但 Gmail 收件箱中没有邮件。

谁能帮我解决这个问题,但我没有任何指南。

<?php
session_cache_limiter( 'nocache' );
$subject = $_REQUEST['subject']; // Subject of your email
$to = "iamuser@gmail.com";  //Recipient's E-mail

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= "From: " . $_REQUEST['name'].'<'.$_REQUEST['email'] .'>'. "\r\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

$message  = 'Name: ' . $_REQUEST['name'] . "<br>";
$message .= 'Company: ' . $_REQUEST['company'] . "<br>";
$message .= $_REQUEST['message'];

if (@mail($to, $subject, $message, $headers))
{
    // Transfer the value 'sent' to ajax function for showing success message.
    echo 'sent';
    // header('Location: ../index.html');
}
else
{
    // Transfer the value 'failed' to ajax function for showing error message.
    echo 'failed';
}
?>

【问题讨论】:

  • 使用邮件函数代替 at.mail,at.mail 函数不会抛出所有警告/错误
  • 检查垃圾邮件。
  • 请注意,您需要提及正确的 From Mail Id。几天前我也遇到了同样的问题。

标签: php html email gmail contact-form


【解决方案1】:

设置标题有问题。 最重要的是您需要在From 部分定义正确有效的电子邮件ID,因为google 通常用于验证域,邮件来自。

如果它在谷歌端没有被列入白名单,那么它会自动结束邮件到垃圾邮件,我认为现在正在发生这种情况。

问题很简单,PHP-Mail 函数没有使用配置良好的 SMTP 服务器。 如今,电子邮件客户端和服务器对电子邮件发送服务器执行大量检查,例如反向 DNS 查找、灰名单和什么。所有这些测试都将因 php mail() 函数而失败。如果您使用的是动态 ip,那就更糟了。使用 PHPMailer-Class 并将其配置为使用 smtp-auth 以及配置良好的专用 SMTP 服务器(本地服务器或远程服务器),您的问题是

你可以试试下面的代码。

$headers = "From: myplace@example.com\r\n";
$headers .= "Reply-To: myplace2@example.com\r\n";
$headers .= "Return-Path: myplace@example.com\r\n";
$headers .= "CC: sombodyelse@example.com\r\n";
$headers .= "BCC: hidden@example.com\r\n";

参考链接。 https://github.com/PHPMailer/PHPMailerPHPMailer/PHPMailerPHPMailer

您可以尝试另一个代码:

function mail_attachment($filename, $path, $mailto, $from_mail, $from_name, $replyto, $subject, $message) {
 $file = $path.$filename;
 $file_size = filesize($file);
 $handle = fopen($file, "r");
 $content = fread($handle, $file_size);
 fclose($handle);
 $content = chunk_split(base64_encode($content));
 $uid = md5(uniqid(time()));
 $header = "From: ".$from_name." <".$from_mail.">\r\n";
 $header .= "Reply-To: ".$replyto."\r\n";
 $header .= "MIME-Version: 1.0\r\n";
 $header .= "Content-Type: multipart/mixed;boundary=\"".$uid."\"\r\n\r\n";
 $header .= "This is a multi-part message in MIME format.\r\n";
 $header .= "--".$uid."\r\n";
 $header .= "Content-type:text/plain;charset=iso-8859-1\r\n";
 $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
 $header .= $message."\r\n\r\n";
 $header .= "--".$uid."\r\n";
 $header .= "Content-Type: application/octet-stream;name=\"".$filename."\"\r\n";
 // use different content types here$header .= "Content-Transfer-Encoding: base64\r\n";
 $header .= "Content-Disposition: attachment;filename=\"".$filename."\"\r\n\r\n";
 $header .= $content."\r\n\r\n";
 $header .= "--".$uid."--";
 if (mail($mailto, $subject, "", $header)) {echo "mail send ... OK";
  // or use booleans here} else {echo "mail send ... ERROR!";
 }
}

【讨论】:

  • 请注意,您需要提及正确的From Mail Id。
【解决方案2】:

如果你在本地服务器上开发这个程序。电子邮件不会发送到您的 gmail 帐户。

如果您想在本地机器上测试您的代码,请安装Test Mail Server Tool

在本地计算机上运行时不会发送电子邮件,但您会了解电子邮件的外观。

当您在虚拟主机服务器上运行相同的操作时,电子邮件将被发送到$to 字段中指定的电子邮件 ID。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    相关资源
    最近更新 更多