550 5.7.1转发被拒绝

时间:2018-02-22 13:20:24

标签: php sendmail telnet centos6

我想知道是否可以使用服务器B的IP地址从服务器A发送电子邮件 我尝试使用波纹管代码从我的应用程序发送电子邮件,但它返回" 550 5.7.1继续拒绝"。

function    sendmail($p_subject,$p_message)
{
    $ip         = 'ipServerB';
    $domain     = 'domain';
    $returnPath = 'contact@domain';     
    $to         = 'to';
    $subject    = 'New Ticket : '.$subject;
    $message    = $message;
    $header     = "from:support@domain\nto:$to\nsubject:$subject\n$message\n.\n";

    $fp = fsockopen($ip, 25);


    $telnet    = array();
    $telnet[0] = "telnet $ip\r\n";
    $telnet[1] = "HELO $domain\r\n";
    $telnet[2] = "MAIL FROM:$returnPath\r\n";
    $telnet[3] = "RCPT TO:$to\r\n";
    $telnet[4] = "DATA\r\n";
    $telnet[5] = $header;


    foreach ($telnet as $current) 
    {         
                fwrite($fp, $current);
                $smtpOutput=fgets($fp);
                echo $smtpOutput.'               ';
    }
}

1 个答案:

答案 0 :(得分:1)

不要推出自己的邮件。使用PHPMailer等类。手动发送电子邮件通常会导致“不干净”#34;邮件被认为是垃圾邮件的风险很高,和/或处理错误和重试的问题。

在这种情况下,例如,您发送无意义的数据,例如telnet命令(应该让您502 5.5.2 Error: command not recognized),SMTP会话完全失明,并且会话被截断比正确关闭。如果你以这种方式成功发送电子邮件,那将主要归功于纯粹的运气,你不应该期望能够以任何可靠性重复这一壮举。

那就是说,"转发被拒绝"表示您从发送邮件的地址,以及您将邮件发送到的地址都不在您所服务的服务器的控制之下#39;重新使用。因此,服务器需要" relay"发给别人的电子邮件;由于您不是授权用户,因此拒绝这样做。

尝试使用SMTP AUTH命令向服务器发送一组有效的凭据。

为了进行比较,您可以使用PHPMailer进行操作:

$mail = new PHPMailer();

$mail->IsSMTP();
$mail->Host = $AddressB;
$mail->Port = 25;
$mail->SMTPAuth = true;
$mail->Username = $UserNameOnServerB;
$mail->Password = $PasswordOnServerB;

$mail->From     = 'yourfrom@example.com';
$mail->FromName = 'Ticket System';
$mail->AddAddress('joe@example.com', 'Joe Bloggs');
$mail->AddAddress('bob@example.com', 'Bob Smith');

$mail->IsHTML(true);                         

$mail->Subject = 'Ticket no. ....';
$mail->Body    = '<h1>It works!</h1><hr /><p>This is the email</p>';
$mail->AltBody = strip_tags($mail->Body);

if (!$mail->Send()) {
   die('Boo hoo: ' . $mail->ErrorInfo);
}
echo 'OK!';