我想知道是否可以使用服务器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.' ';
}
}
答案 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!';