【问题标题】:Not receiving emails from gmail users from the contact form on my site未从我网站上的联系表中收到来自 gmail 用户的电子邮件
【发布时间】:2014-11-27 18:10:10
【问题描述】:

我有一个使用 PHPMailer 制作的联系表格,用户可以在其中输入他们的数据。如果在电子邮件字段中,输入带有 gmail 的电子邮件,我没有收到这封电子邮件,甚至在垃圾邮件文件夹中也没有。我设置了ReplyTo,但都不起作用。我假设它可以被服务器阻止。

PHP:

require_once('../phpmailer/class.phpmailer.php');

/*datos personales*/
$name       = strip_tags(trim($_POST['nombre']));
$name       = str_replace(array("\r","\n"),array(" "," "),$name);
$provincia  = $_POST['provincia'];
$localidad  = strip_tags(trim($_POST['localidad']));
$email      = filter_var($_POST["email"], FILTER_VALIDATE_EMAIL);
$prefijo    = strip_tags(trim($_POST['prefijo']));
$sufijo     = strip_tags(trim($_POST['telefono']));
$telefono   = $prefijo.' - '.$sufijo;


if ( $marca == 'default' || $modelo == 'default' || $cilin == 'default' || $valvulas == 'default' || $anio == 'default' || $autonomia == 'default') {            
    http_response_code(400);
    echo "Porfavor, corrobore que no falte ningún dato del vehículo.";
    exit;
} else if ( $provincia == 'default' ) {
    http_response_code(400);
    echo "Porfavor, eliga una provincia.";
    exit;
} else if ( $pago == 'default' ) {
    http_response_code(400);
    echo "Porfavor, eliga un método de pago.";
    exit;
} else if (empty($name) || empty($localidad) || empty($prefijo) | empty($telefono)) {
    http_response_code(400);
    echo "Porfavor, complete los campos que estan en blanco.";
    exit;
}

$recipient = "info@energygnc.com.ar";

$subject = "[Cotizador EnergyGNC] Solicitud de cotización por $name en energygnc.com.ar";
// Build the email content.
$email_content = "Solicitud de cotización realizada por: $name ($email)<br><br>";
$email_content .= "Datos del vehículo:<br>Marca: $marca $modelo modelo $anio<br>";
$email_content .= "Motor: $cilin - $valvulas<br>";
$email_content .= "Autonomia deseada: $autonomia<br><br>";
$email_content .= "Datos del cliente:<br>Nombre: $name<br>Email: $email<br>Telefono: $telefono<br>";
$email_content .= "Provincia: $provincia<br>Localidad: $localidad.<br>";
$email_content .= "Metodo de pago que me interesa: $pago";

$mail = new PHPMailer();
$mail->IsHTML(true);

$mail->SetFrom($email, $name);
$mail->ClearReplyTos();
$mail->AddReplyTo($email, $name);
$mail->AddAddress($recipient);
$mail->Subject = '[Cotizador EnergyGNC] Solicitud de cotización por '.$name.' en energygnc.com.ar'; 
$mail->Body = $email_content;

if(!$mail->Send()) {
    echo "Mailer Error: " . $mail->ErrorInfo;
} else {
    echo "Gracias por contactarse con nosotros.";
}

【问题讨论】:

  • 您需要检查您的邮件服务器日志以了解发生了什么。
  • Nov 27 16:27:25 lupine postfix/smtp[18189]: A095F61009: to=&lt;produccion@dev.criterionet.com&gt;, relay=irv-shared-relay1.dreamhost.com[64.90.62.20]:25, delay=0.03, delays=0.01/0/0/0.01, dsn=5.7.1, status=bounced (host irv-shared-relay1.dreamhost.com[64.90.62.20] said: 550 5.7.1 Sender domain not allowed. Please read: http://dhurl.org/20b (in reply to end of DATA command))@Synchro
  • @Synchro 显然 DreamHost 阻止了这一点。但是如果我设置AddAddress(webmaster@domaindreamhost.com)AddReplyTo(user@gmail.com)。答案是取AddAdress 的值。

标签: php email gmail phpmailer


【解决方案1】:

GMail 很可能使用Sender Policy Framework。这意味着您的邮件提供商将检查您的服务器(即代表 gmail 发送邮件)是否被 Google 允许使用其域发送邮件。

您宁愿将发件人的电子邮件放在邮件内容中,并在“发件人”字段中使用其他地址。

【讨论】:

  • 我的主机是 Dreamhost。该表格将发送至您的网络邮箱 (info@domain.com)。对我(和我的客户)来说,最佳选择是当您点击回复时,已经向填写表单集的用户发送电子邮件。
  • 一些邮件提供商只检查电子邮件的From 字段,其他一些也检查Reply To 字段,但它不是自动的。您是否尝试将 gmail 地址仅放在 Reply To 上,而不是作为邮件的发件人?
  • 如果我这样做了,但需要setFrom 电子邮件回复。我还尝试将AddReplyTo 放在setFrom 之前,正如我在另一篇帖子的解决方案中看到的那样,但两者都不适用于gmail
  • 好吧,唯一剩下的就是不要在 From 和 Reply to 字段中使用 gmail 地址,而是将其放在内容中,并在其上带有 mailto 链接以便快速响应.
  • 服务器将首先检查信封发件人。使用 Sender 属性在 Phpmailer 中设置它。不要在发件人地址中放置与发送服务器无关的地址。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-10
相关资源
最近更新 更多