email — скрипт на PHP для отправки почты после заполнения формы

На сайте местной футбольной команды (введите описание ссылки здесь который размещен на One.com, я запрограммировал ставки на футбол на 8 матчей каждого игрового дня (8 матчей).
Когда пользователь заполнил форму и отправил ее, он получает письмо со своими ставками, а веб-мастер получает копию в виде СК. Почта отправляется из основного почтового ящика домена doskobeveren.be: [email protected] на почтовый адрес пользователя.

С сезона 2013-2014 и первых 28 недель сезона 2014-2015 сценарий всегда работал нормально (= 58 недель).
Но с прошлой недели часть сценария, содержащая скрытую копию, дает для каждой почты сообщение «Недоставленная почта, возвращаемая отправителю» в основном почтовом ящике ([email protected]) вместо почтового ящика веб-мастера.

Эта почта говорит:
Отчетность-МТА: днс; mail-out2.one.com
X-Postfix-Queue-ID: 9ABF0552A2
X-Postfix-Sender: rfc822; [email protected]
Дата прибытия: ср., 15 апреля 2015 г. 17:36:16 +0200 (CEST)

Конечный получатель: rfc822; [email protected]
Оригинал-Получатель: rfc822; [email protected]
Действие: не удалось
Статус: 5.7.1
Remote-MTA: днс; mxcluster2.one.com
Диагностический код: smtp; 550 5.7.1 Заблокирован почтовым фильтром

Поддержка One.com говорит мне, что это следующие причины:

  • Неправильный идентификатор сообщения.
  • Используемое доменное имя неверно.

Поскольку почта создается веб-страницей, мне интересно, вдруг ли PHP-сценарий вызвал, по какой-либо причине, после 58 недель хорошей работы, внезапно проблему?

PHP приходит из: введите описание ссылки здесь

enter code here
<h3>Dit bericht zal u per mail ontvangen:</h3>
<?php
$pronomail ='';
$pronomail = $_SESSION['username']. ", u heeft de volgende pronostiek ingestuurd voor speeldag " .$speeldag. "\n\n";

for($i=1; $i<=8; $i++){
$pronomail .=  "wedstrijd " .$i. ": " .$wedstrijd[$i]. " = ";
switch ($i) {
case 1:
$pronomail .= "Prono1: " .$k1w1. " - Prono2: " .$k2w1. " - Prono3: " .$k3w1. "\n\n";
break;
case 2:
$pronomail .= "Prono1: " .$k1w2. " - Prono2: " .$k2w2. " - Prono3: " .$k3w2. "\n\n";
break;
case 3:
$pronomail .= "Prono1: " .$k1w3. " - Prono2: " .$k2w3. " - Prono3: " .$k3w3. "\n\n";
break;
case 4:
$pronomail .= "Prono1: " .$k1w4. " - Prono2: " .$k2w4. " - Prono3: " .$k3w4. "\n\n";
break;
case 5:
$pronomail .= "Prono1: " .$k1w5. " - Prono2: " .$k2w5. " - Prono3: " .$k3w5. "\n\n";
break;
case 6:
$pronomail .= "Prono1: " .$k1w6. " - Prono2: " .$k2w6. " - Prono3: " .$k3w6. "\n\n";
break;
case 7:
$pronomail .= "Prono1: " .$k1w7. " - Prono2: " .$k2w7. " - Prono3: " .$k3w7. "\n\n";
break;
case 8:
$pronomail .= "Prono1: " .$k1w8. " - Prono2: " .$k2w8. " - Prono3: " .$k3w8. "\n\n";
break;

}

}

$pronomail .= " Veel succes! \n\n";
$bericht =str_replace("\n","<br />",$pronomail);
echo $bericht. "<br />";

//define the receiver of the email
$to = $_SESSION['email'];
//define the subject of the email
$subject = 'Pronostiek';
//define the message to be sent. Each line should be separated with \n
$message = $pronomail;
//define the headers we want passed. Note that they are separated with \r\n
$headers = "From: [email protected]\r\nBcc: [email protected]\r\n";
$headers .= "Message-ID: <" . md5(uniqid(time())) . $_SERVER['SERVER_NAME']. ">\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Date: ".date("D, d M Y H:i:s") . "\r\n";
//$headers .= "Reply-To: [email protected]\r\n";
$headers .= "X-Priority: 3\r\nX-MSMail-Priority: Normal\r\n";
$headers .= "X-Mailer: PHP/".phpversion()."\r\n";
$headers .= "X-MimeOLE: Produced By MyDomain\r\n";
$headers .= "Content-type: text/plain; charset=iso-8859-1\r\n";
//$headers .= "Date: .date('r', $_SERVER['REQUEST_TIME'])\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 is verstuurd" : "Mail kon niet verstuurd worden";

?>

==========

Кто-нибудь может дать мне решение, пожалуйста? Благодарю.

1

Решение

Поля заголовка являются необязательными и действительно необходимы, только если вы хотите настроить их. Закомментируйте строку, генерирующую Message-ID, и она, вероятно, пройдет систему фильтрации почтового сервера, поскольку сама сгенерирует действительный Message-ID.

0

Другие решения

Я бы посоветовал PHPMailer. Это просто и легко реализовать.

<?php
require 'PHPMailerAutoload.php'; // you need to download the `PHPMailer` library and add that file path here. It changes where you place.

if(isset($_POST['submit'])
{

$mail = new PHPMailer;

//$mail->SMTPDebug = 3;                               // Enable verbose debug output

$mail->isSMTP();                                      // Set mailer to use SMTP
$mail->Host = 'smtp1.example.com;smtp2.example.com';  // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = '[email protected]';                 // SMTP username
$mail->Password = 'secret';                           // SMTP password
$mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587;                                    // TCP port to connect to

$mail->From = $_POST['fromAddress'];
$mail->FromName = $_POST['fromName'];
$mail->addAddress($_POST['toAddress']);               // Name is optional
$mail->isHTML(true);                                  // Set email format to HTML

$mail->Subject = $_POST['subject'];
$mail->Body    = $_POST['message'];

if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}
}

?><html>
<body>

<form method="post" action="">
From address : <input type="email" name="fromAddress" /><br/>
From Name : <input type="text" name="fromName" /><br/>
To address :  <input type="email" name="toAddress" /><br/>
Subject : <input type="text" name="subject" /><br/>
Message : <input type="text" name="message" /><br/>
<input type="submit" name="submit" value="Submit" />

</form>

</body>
</html>
0

Я сделал 1 изменение в своем php-коде:

Инстаед из:

$headers = "From: [email protected]\r\nBcc: [email protected]\r\n";

Я изменил это на:

$headers = "From: [email protected]\r\nBcc: [email protected]\r\n";

Почтовый ящик: [email protected] является одним из моих других почтовых адресов.
И теперь это снова сработало; в почтовый ящик не поступило сообщение «Недоставленная почта возвращена отправителю»: [email protected].

Поэтому я думаю, что что-то изменилось на почтовом (ых) сервере (ах) One.com, который заблокировал отправку скрытой копии между 2 почтовыми ящиками одного и того же домена ????

Я внес изменения, предложенные Эндрю Кейсом, закомментировал строку, генерирующую Message-ID, и изменил обратно Bcc на [email protected], и он снова работает.

0
По вопросам рекламы [email protected]