#php #email
#php #Адрес электронной почты
Вопрос:
Я использую почтовую функцию php для отправки электронных писем. Проблема в том, что электронные письма с разных доменов не отправляются. Отправляются только электронные письма с моего домена. Например, когда я отправляю электронное письмо с username@mydomain.com оно отправлено. Когда я отправляю электронное письмо с помощью from как username@yahoo.com или имя пользователя@gmail .com электронное письмо не отправляется.
Когда электронные письма отправляются, они попадают в раздел «спам».
Какие заголовки мне нужны, чтобы обойти это ограничение? Или любое другое решение.
Спасибо.
Комментарии:
1. Вы проверили возвращаемое значение функции mail()? Если он возвращает true в обоих случаях, то это может быть проблема со спам-фильтром. У меня была похожая проблема раньше, и письма отправлялись корректно, но были заблокированы антиспам-фильтром нашего предприятия.
2. вы уверены, что это не выходит? только потому, что вы не получаете его, это не значит, что оно не выходит наружу.
3. Они отправляются в раздел спама. Как вы решили свою проблему?
4. Для протокола, это называется фишингом, если только вы не используете учетные данные SMTP или не имеете действительных записей DKIM и SPF.
Ответ №1:
Это зависит от вашего SMTP-сервера. Вероятно, это предотвратит распространение спама.
Ответ №2:
Вы можете использовать функцию PEAR mailhttp://pear.php.net/package/Mail .С помощью этого вы можете отправлять электронную почту с сервера exchange.Но если вы используете сервер sendmail, то вы можете использовать приведенный ниже код.Приведенный ниже код не будет работать для Microsoft exchange server
Надеюсь, это поможет вам.
<?php
//new function
$to=//receipent email addressaddress;
$message=//Message;
$nameto = "Name of receipent";
$from = "abc@example.com";//sender address
$namefrom = "Test";//from name
$subject = "Subject of the mail";
function authSendEmail($from, $namefrom, $to, $nameto, $subject, $message)
{
//SMTP SERVER DETAILS
/* * * * CONFIGURATION START * * * */
$smtpServer = "mail.example.com";//mail server address
$port = "25";//port
$timeout = "30";
$username = "test";//user name
$password = "****";//password of sender
$localhost = "1.2.3.4";//Ip address of mail server
$newLine = "rn";
/* * * * CONFIGURATION END * * * * */
//Connect to the host on the specified port
$smtpConnect = fsockopen($smtpServer, $port, $errno, $errstr, $timeout);
$smtpResponse = fgets($smtpConnect, 515);
if(empty($smtpConnect))
{
$output = "Failed to connect: $smtpResponse";
return $output;
}
else
{
$logArray['connection'] = "Connected: $smtpResponse";
}
//Request Auth Login
fputs($smtpConnect,"AUTH LOGIN" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['authrequest'] = "$smtpResponse";
//Send username
fputs($smtpConnect, base64_encode($username) . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['authusername'] = "$smtpResponse";
//Send password
fputs($smtpConnect, base64_encode($password) . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['authpassword'] = "$smtpResponse";
//Say Hello to SMTP
fputs($smtpConnect, "HELO $localhost" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['heloresponse'] = "$smtpResponse";
//Email From
fputs($smtpConnect, "MAIL FROM: $from" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['mailfromresponse'] = "$smtpResponse";
//Email To
fputs($smtpConnect, "RCPT TO: $to" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['mailtoresponse'] = "$smtpResponse";
//The Email
fputs($smtpConnect, "DATA" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['data1response'] = "$smtpResponse";
//Construct Headers
$headers = "MIME-Version: 1.0" . $newLine;
$headers .= "Content-type: text/html; charset=iso-8859-1" . $newLine;
$headers .= "To: $nameto <$to>" . $newLine;
$headers .= "From: $namefrom <$from>" . $newLine;
fputs($smtpConnect, "To: $tonFrom: $fromnSubject: $subjectn$headersnn$messagen.n");
$smtpResponse = fgets($smtpConnect, 515);
$logArray['data2response'] = "$smtpResponse";
// Say Bye to SMTP
fputs($smtpConnect,"QUIT" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['quitresponse'] = "$smtpResponse";
}
if(authSendEmail($from, $namefrom, $to, $nameto, $subject, $message))
{echo "send";}
else{echo "failed";}
?>
Ответ №3:
Попробуйте добавить пятый параметр в вашу функцию mail():
mail($to,$subject,$message,$headers,"-f ".$from);
ПРИМЕЧАНИЕ: $from должно совпадать с адресом электронной почты ‘from’, который вы указали в заголовке.
Ответ №4:
Похоже, что ваш SMTP-сервер не разрешает ретрансляцию. Поговорите с администратором вашего почтового сервера и спросите, откроют ли они ретрансляцию для IP-адреса вашего приложения.