У меня есть HTML-форма, которая использует php для отправки данных формы в электронном письме на внешний почтовый сервер. Мой код такой (переменные изменены для защиты невиновных):
<?php
//$ckNotify = $_POST['ckNotify'];
$ckNotify = isset($_POST['ckNotify']) && $_POST['ckNotify'] ? "Please sign me up for Email Notifications" : "NO";
$ckUnsubscribe = isset($_POST['ckUnsubscribe']) && $_POST['ckUnsubscribe'] ? "Plese unsubscribe me from Email Notifications" : "Does Not Apply to this instance";
$name = $_POST['name'];
$visitor_email = $_POST['email'];
$message = $_POST['message'];
if (!empty($_POST)) //Validate first
{
if (empty($name) || empty($visitor_email)) {
echo "Name and email are mandatory!";
exit;
}
}
if (IsInjected($visitor_email)) {
echo "Bad email value!";
exit;
}
date_default_timezone_set('America/Chicago');
require_once 'PHPMailerAutoload.php';
//Create a new PHPMailer instance
$mail = new PHPMailer;
//Tell PHPMailer to use SMTP
$mail->isSMTP();
//Enable SMTP debugging
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
// 3 = verbose messages
$mail->SMTPDebug = 3;
//Ask for HTML-friendly debug output
$mail->Debugoutput = 'html';
//Set the hostname of the mail server
$mail->Host = "74.84.86.134";
//Set the SMTP port number - likely to be 25, 465 or 587
$mail->Port = 25;
//Whether to use SMTP authentication
$mail->SMTPAuth = false;
//Set who the message is to be sent from
$mail->setFrom('[email protected]', 'Mike Tolliver');
//Set an alternative reply-to address
$mail->addReplyTo('[email protected]', 'Mike Tolliver');
//Set who the message is to be sent to
$mail->addAddress('[email protected]', 'Mike Tolliver');
//Set the subject line
$mail->Subject = 'New Form Submission';
//Get message contents from form and place in body of email as basic plain-test
$body = "Email Notifications: $ckNotify
UnSubscribe User: $ckUnsubscribe
Name: $name
Email: $visitor_email
Message: $message";
$mail->MsgHTML($body);
//Replace the plain text body with one created manually
//$mail->AltBody = 'This is a plain-text message body';
//Attach an image file
//$mail->addAttachment('images/phpmailer_mini.png');
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
//done - redirect to thank-you page if no errors
if (!$mail->Send()) {
header('Location: ThankYou.html');
//echo "Mail Sent Successfully";
} else {
echo "Mail Not Sent";
}
// Function to validate against any email injection attempts
function IsInjected($str)
{
$injections = array(
'(\n+)',
'(\r+)',
'(\t+)',
'(%0A+)',
'(%0D+)',
'(%08+)',
'(%09+)'
);
$inject = join('|', $injections);
$inject = "/$inject/i";
if (preg_match($inject, $str)) {
return true;
} else {
return false;
}
}
Но я получаю этот вывод после отправки формы и перехода на страницу php:
2015-02-03 23:18:21 Connection: opening to 74.84.86.134:25, t=10, opt=array ( )
2015-02-03 23:18:21 Connection: opened
2015-02-03 23:18:21 SERVER -> CLIENT: 220 barracuda.platinum-corp.com ESMTP (b35451cd44f584ec6f962de7068c7240)
2015-02-03 23:18:21 CLIENT -> SERVER: EHLO www.extsmtp.net
2015-02-03 23:18:21 SERVER -> CLIENT: 250-barracuda.platinum-corp.com Hello www.extsmtp.net [173.0.129.93], pleased to meet you 250-SIZE 100000000 250-STARTTLS 250-PIPELINING 250-8BITMIME 250 HELP
2015-02-03 23:18:21 CLIENT -> SERVER: MAIL FROM:
2015-02-03 23:18:21 SERVER -> CLIENT: 250 Sender OK
2015-02-03 23:18:21 CLIENT -> SERVER: RCPT TO:
2015-02-03 23:18:21 SERVER -> CLIENT: 250 Recipient OK
2015-02-03 23:18:21 CLIENT -> SERVER: DATA
2015-02-03 23:18:21 SERVER -> CLIENT: 354 Start mail input; end with .
2015-02-03 23:18:21 CLIENT -> SERVER: Date: Tue, 3 Feb 2015 17:18:21 -0600
2015-02-03 23:18:21 CLIENT -> SERVER: Return-Path: [email protected]
2015-02-03 23:18:21 CLIENT -> SERVER: To: Mike Tolliver
2015-02-03 23:18:21 CLIENT -> SERVER: From: Mike Tolliver
2015-02-03 23:18:21 CLIENT -> SERVER: Reply-to: Mike Tolliver
2015-02-03 23:18:21 CLIENT -> SERVER: Subject: New Form Submission
2015-02-03 23:18:21 CLIENT -> SERVER: Message-ID: <[email protected]>
2015-02-03 23:18:21 CLIENT -> SERVER: X-Priority: 3
2015-02-03 23:18:21 CLIENT -> SERVER: X-Mailer: PHPMailer 5.2 (http://code.google.com/a/apache-extras.org/p/phpmailer/)
2015-02-03 23:18:21 CLIENT -> SERVER: MIME-Version: 1.0
2015-02-03 23:18:21 CLIENT -> SERVER: Content-Type: multipart/alternative;
2015-02-03 23:18:21 CLIENT -> SERVER: boundary="b1_718f56184800b47dd0a9327e8003f4f1"2015-02-03 23:18:21 CLIENT -> SERVER:
2015-02-03 23:18:21 CLIENT -> SERVER:
2015-02-03 23:18:21 CLIENT -> SERVER: --b1_718f56184800b47dd0a9327e8003f4f1
2015-02-03 23:18:21 CLIENT -> SERVER: Content-Type: text/plain; charset="iso-8859-1"2015-02-03 23:18:21 CLIENT -> SERVER: Content-Transfer-Encoding: 8bit
2015-02-03 23:18:21 CLIENT -> SERVER:
2015-02-03 23:18:21 CLIENT -> SERVER: To view the message, please use an HTML compatible email viewer!
2015-02-03 23:18:21 CLIENT -> SERVER:
2015-02-03 23:18:21 CLIENT -> SERVER:
2015-02-03 23:18:21 CLIENT -> SERVER: --b1_718f56184800b47dd0a9327e8003f4f1
2015-02-03 23:18:21 CLIENT -> SERVER: Content-Type: text/html; charset="iso-8859-1"2015-02-03 23:18:21 CLIENT -> SERVER: Content-Transfer-Encoding: 8bit
2015-02-03 23:18:21 CLIENT -> SERVER:
2015-02-03 23:18:21 CLIENT -> SERVER: Email Notifications: Please sign me up for Email Notifications
2015-02-03 23:18:21 CLIENT -> SERVER: UnSubscribe User: Does Not Apply to this instance
2015-02-03 23:18:21 CLIENT -> SERVER: Name: Joyce Small
2015-02-03 23:18:21 CLIENT -> SERVER: Email: [email protected]
2015-02-03 23:18:21 CLIENT -> SERVER: Message: Test message using external smtp settings
2015-02-03 23:18:21 CLIENT -> SERVER: 2015-02-03 23:18:21 CLIENT -> SERVER:
2015-02-03 23:18:21 CLIENT -> SERVER:
2015-02-03 23:18:21 CLIENT -> SERVER: --b1_718f56184800b47dd0a9327e8003f4f1--
2015-02-03 23:18:21 CLIENT -> SERVER:
2015-02-03 23:18:21 CLIENT -> SERVER: .
2015-02-03 23:18:21 SERVER -> CLIENT: 250 Ok: queued as CA053776D18 Mail Not Sent
Похоже, у меня все в порядке (но опять же, я новичок в php), за исключением «Mail not Sent» в конце. Кто-нибудь знает, почему почта не отправляется? Судя по моим очень ограниченным знаниям, кажется, что внешний SMTP-сервер не ретранслирует, но что я знаю. Спасибо за любую помощь!
Удаленный хост, через который вы пытаетесь ретранслировать сообщения (74.84.86.134), переходит на spamfilter.coralville.platinum-corp.com. Я предполагаю, что это MX для домена, на который вы пытаетесь отправить (иначе вы, вероятно, не достигли бы того же уровня, что и с сеансом SMTP). Несмотря на это, кажется, что этот удаленный хост принимает сообщения из вашего PHP-приложения, но затем принимает решение после получения сообщения о том, что вы не являетесь законным отправителем, и, следовательно, сообщение «почта не отправлена».
Чтобы проверить, что почта, отправленная из вашего приложения, имеет явную проблему, из-за которой другие почтовые серверы считают ее спамом, попробуйте отправить сообщение из вашего приложения на [email protected]. Эта служба выполнит кучу проверок, и вы получите отчет с огромной информацией, например, правильно ли пересылает и реверсирует DNS вашего сервера, есть ли IP вашего сервера в каких-либо черных списках, если у вас есть проблема с ваши записи SPF и т. д.
Или более простое решение может состоять в том, чтобы просто передавать эти исходящие сообщения через хорошо известную SMTP-ретрансляцию, такую как smtp.gmail.com, SendGrid и т. Д.
Других решений пока нет …