我在使用PHP Mailer发送mil时遇到问题。我尝试了两种不同的邮件服务器。对于其中一个邮件服务器,我也可以通过本地IP访问。当我使用本地IP作为$server
变量的值时,工作正常并且邮件会通过。
但是,当我使用外部IP作为邮件服务器时,事情不起作用,我得到如下所示的错误。使用其他邮件服务器的DNS时也是如此。两次完全相同的错误。
$mail = new PHPMailer;
$server = 'mail.xxxx.com';
$smtpPort = '25';
$username = 'xxxx@xxxx.com';
$password = 'xxxxx';
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = $server; // Specify main and backup server
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = $username; // SMTP username
$mail->Password = $password; // SMTP password
$mail->From = 'xxxx@xxxxxx.com';
$mail->addAddress('abijeet@xxxxx.asia', 'xxxxx'); // Add a recipient
$mail->WordWrap = 50; // Set word wrap to 50 characters
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body = 'This is the HTML message body <b>in bold!</b>';
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
exit;
}
echo 'Message has been sent';
这是使用外部IP或DNS时两台服务器的PHPMailer的调试输出 -
SMTP -> FROM SERVER:220 mail.xxxxxx.com ESMTP Postfix
SMTP -> FROM SERVER: 250-mail.xxxxxx.com 250-PIPELINING 250-SIZE 15728640 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN
SMTP -> FROM SERVER:
SMTP -> ERROR: MAIL not accepted from server:
Message could not be sent.Mailer Error: The following From address failed: xxx@xxxxxx.comSMTP server error:
SMTP -> FROM SERVER:220 xxxxx.com ESMTP Citadel server ready.
SMTP -> FROM SERVER: 250-Hello localhost (xxx.xxxxx.net [xxx.xxx.xxx.xxx]) 250-HELP 250-SIZE 10485760 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250 8BITMIME
SMTP -> FROM SERVER:
SMTP -> ERROR: MAIL not accepted from server:
Message could not be sent.Mailer Error: The following From address failed: abijeet@xxxx.comSMTP server error:
另请注意,我能够使用Windows Live Mail成功连接到基于DNS的邮件服务器,因此这不是端口问题。
答案 0 :(得分:1)
如果你连接到外部IP地址,你几乎肯定会得到一个外部源地址,我怀疑它是你的情况下的动态地址。配置良好的电子邮件服务器不允许随机外部IP地址通过它们发送邮件。
解决方案是使用SMTP authentication或内部地址。
答案 1 :(得分:0)
我在网上发现这个教程从本地服务器发送邮件。
此解决方案需要sendmail.exe(一个命令行界面(CLI)可执行文件,它接受来自PHP的电子邮件,连接到SMTP服务器并发送电子邮件)。您不需要按命令使用它,不要打扰它:-)下载sendmail.zip并按照以下步骤操作:
在“C:\ wamp \”中创建名为“sendmail”的文件夹。 在“sendmail”文件夹中解压缩这4个文件:“sendmail.exe”,“libeay32.dll”,“ssleay32.dll”和“sendmail.ini”。
打开“sendmail.ini”文件并将其配置为以下
smtp_server=smtp.gmail.com
smtp_port=465
smtp_ssl=ssl
default_domain=localhost
error_logfile=error.log
debug_logfile=debug.log
auth_username=[your_gmail_account_username]@gmail.com
auth_password=[your_gmail_account_password]
pop3_server=
pop3_username=
pop3_password=
force_sender=
force_recipient=
hostname=localhost
您无需为这些属性指定任何值:pop3_server,pop3_username,pop3_password,force_sender,force_recipient。如果您已经发送了成功的电子邮件,则error_logfile和debug_logfile设置应保持空白,否则此文件的大小将不断增加。如果您无法使用sendmail发送电子邮件,请启用这些日志文件设置。
Enable IMAP Access in your GMail’s Settings -> Forwarding and POP/IMAP -> IMAP Access:
Enable “ssl_module” module in Apache server:
Enable “php_openssl” and “php_sockets” extensions for PHP compiler:
从“C:\ wamp \ bin \ apache \ Apache2.2.17 \ bin”打开php.ini并将其配置如下(“C:\ wamp \ bin \ php \ php5.3.x”中的php.ini “不起作用)(你只需要在下面的代码中配置最后一行,在其他行之间加上分号(;)前缀):
[mail function]
; For Win32 only.
; http://php.net/smtp
;SMTP =
; http://php.net/smtp-port
;smtp_port = 25
; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = you@domain.com
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
sendmail_path = "C:\wamp\sendmail\sendmail.exe -t -i"
重启WAMP服务器。 创建一个PHP文件并在其中编写以下代码:
<?php
$to = 'recipient@yahoo.com';
$subject = 'Testing sendmail.exe';
$message = 'Hi, you just received an email using sendmail!';
$headers = 'From: sender@gmail.com' . "\r\n" .
'Reply-To: sender@gmail.com' . "\r\n" .
'MIME-Version: 1.0' . "\r\n" .
'Content-type: text/html; charset=iso-8859-1' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
if(mail($to, $subject, $message, $headers))
echo "Email sent";
else
echo "Email sending failed";
?>
在$ to和$ headers变量中进行适当的更改,以设置收件人,发件人和回复地址。将其另存为“send-mail.php”。 (您可以将它保存在“C:\ wamp \ www”中的任何子文件夹中。)
答案 2 :(得分:0)
我更新了PHP邮件程序的版本,现在似乎正在运行。不需要对代码进行任何更改。正在使用的旧版本是 5.1 。当前版本 5.2.7