发送邮件时收到此错误。
Message could not be sent.Mailer Error: The following From address failed: sample@mydomain.com : MAIL FROM command failed,Temporary system failure. Please try again later. ,451,4.3.0SMTP server error: MAIL FROM command failed Detail: Temporary system failure. Please try again later. SMTP code: 451 Additional SMTP info: 4.3.0SMTP server error: MAIL FROM command failed Detail: Temporary system failure. Please try again later. SMTP code: 451 Additional SMTP info: 4.3.0
这是我的代码:
require 'phpmailer/PHPMailerAutoload.php';
$html = "<b>Hello world!</b>";
$email = "recipient@example.com";
$mail = new PHPMailer;
$mail->isSMTP();
$mail->setFrom('sample@mydomain.com');
$mail->addAddress($email);
$mail->isHTML(true);
$mail->Subject = 'Sample Subject';
$mail->Body = $html;
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Email sent';
}
我还尝试删除$mail->isSMTP();
,我收到回复消息Email sent
问题就是当我检查我的收件箱和垃圾邮件文件夹时,因为我将我的个人电子邮件设置为电子邮件的收件人,电子邮件不在那里。这是服务器问题吗?
我还检查了/var/log/mail.err
,我可以看到一个说明collect: Cannot write ./dfv4PAGY73013302 (bfcommit, uid=0, gid=119): No such file or directory
的错误日志 - 这是什么?
我已经敲打了2天但我不知道问题是什么。我在我的服务器上安装了一个新的LAMP堆栈,也配置了postfix(只是说这个,可能会帮助你了解一下)。
这里似乎有什么问题?
非常感谢您的帮助!谢谢!
答案 0 :(得分:2)
你的代码很好。它的工作原理和证据是您从SMTP服务器收到错误消息。问题是它处理的数据。
正确配置的SMTP服务器不接受中继电子邮件。 /**
* @ORM\ManyToMany(targetEntity="RejectReason")
* @ORM\JoinTable(name="relationship_application_reject_reasons",
* joinColumns={@ORM\JoinColumn(name="application_id", referencedColumnName="id", onDelete="CASCADE")},
* inverseJoinColumns={@ORM\JoinColumn(name="reject_reason_id", referencedColumnName="id")}
* )
*/
private $rejectReasons;
地址或NULL
,From:
或To:
中的至少一个地址必须由其托管,才能接受要处理的电子邮件。
使用Cc:
由您用于发送的SMTP服务器托管的真实电子邮件地址。例如,如果您使用Bcc:
,则必须将您的Gmail地址用作From:
(在这种情况下还要使用SMTP身份验证)。
您的代码未指定SMTP服务器;在这种情况下,PHPMailer使用smtp.gmail.com
,最有可能将电子邮件中继到ISP的ISP服务器(如果此代码在公司的Intranet中运行,则转发给您公司的SMTP服务器)。使用您提供的ISP(或您的工作电子邮件地址,如果代码适用于您的工作)提供的电子邮件地址为From:
,它应该有效。
答案 1 :(得分:0)
更新您的PHPMailer。在通过TLS SMTP连接时,旧版本的PHPMailer似乎不支持自签名证书。
我花了两天时间试图解决这个问题,最后我更新了PHPMailer,问题就消失了!
我的电子邮件服务器正在Debian 9上运行iRedMail软件包。
下载最新的PHPmailer zip并解压缩到当前文件夹中的PHPMailer文件夹并执行:
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
require 'PHPMailer/src/Exception.php';
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPOptions = ['ssl'=> ['allow_self_signed' => true]];
$mail->SMTPSecure = 'tls';
//etc etc......
答案 2 :(得分:0)
尝试使用php中的ssl socket(使用tls / ssl的示例):
driver.find_elements_by_xpath("//div[@class='o_primary' and contains(text(), '%s')]/parent::div[*]/parent::div[*]/parent::div[*]/descendant::button[@data-name='open_ui']" % (shop))[0].click()
如果您需要从dns获取收件人电子邮件域的主机名:
// Show errors
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
// Your hostname
$helloHostname = "localhost";
// Emails
$toEmail = "to@email.com";
$fromEmail = "from@email.com";
// Set mx hostname from dns for recipient !!!
$hostnameMX = "mxhost.boo.xx";
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'verify_peer', false);
stream_context_set_option($ctx, 'ssl', 'verify_peer_name', false);
try{
// echo $socket = stream_socket_client('ssl://smtp.gmail.com:587', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
echo $socket = stream_socket_client('tcp://'.$hostnameMX.':25', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
if (!$socket) {
print "Failed to connect $err $errstr\n";
return;
}else{
// Http
// fwrite($socket, "GET / HTTP/1.0\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n");
// Smtp
echo fread($socket,8192);
echo fwrite($socket, "EHLO ".$helloHostname."\r\n");
echo fread($socket,8192);
// Start tls connection
echo fwrite($socket, "STARTTLS\r\n");
echo fread($socket,8192);
echo stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT);
// Send ehlo
echo fwrite($socket, "EHLO ".$helloHostname."\r\n");
echo fread($socket,8192);
echo fwrite($socket, "MAIL FROM: <".$fromEmail.">\r\n");
echo fread($socket,8192);
echo fwrite($socket, "rcpt to: <".$toEmail.">\r\n");
echo fread($socket,8192);
echo fwrite($socket, "DATA\n");
echo fread($socket,8192);
echo fwrite($socket, "Date: ".time()."\r\nTo: <".$toEmail.">\r\nFrom:<".$fromEmail.">\r\nSubject:Hello from php socket tls\r\n.\r\n");
echo fread($socket,8192);
echo fwrite($socket, "quit \n");
echo fread($socket,8192);
/* Turn off encryption for the rest */
// stream_socket_enable_crypto($fp, false);
fclose($socket);
}
}catch(Exception $e){
echo $e;
}