php使用SMTP发送电子邮件[重复]
Posted
技术标签:
【中文标题】php使用SMTP发送电子邮件[重复]【英文标题】:php send email using SMTP [duplicate] 【发布时间】:2013-09-19 09:34:35 【问题描述】:我有一个 android html5 php 应用程序,我想让用户使用 Gmail 或 Yahoo 向其他人发送电子邮件。这是我使用的代码
<?php
$smtp=$_GET["smtp"];
$youremail= $_GET["youremail"];
$emailpassword=$_GET["emailpassword"];
$companyemail=$_GET["companyemail"];
$messagetitle= $_GET["messagetitle"];
$messagetext=$_GET["messagetext"];
//this is a path to PHP mailer class you have dowloaded
include("class.phpmailer.php");
$emailChunks = explode(",", $companyemail);
for($i = 0; $i < count($emailChunks); $i++)
// echo "Piece $i = <br />";
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPDebug = 1; // errors and messages
//$mail->SMTPSecure = "tls"; // sets the prefix to the servier
$mail->Port = 587;
$mail->Host = "$smtp";
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = "$youremail"; // SMTP username
$mail->Password = "$emailpassword"; // SMTP password
$mail->From = "$youremail"; //do NOT fake header.
$mail->FromName = "$youremail";
$mail->AddAddress("$emailChunks[$i]"); // Email on which you want to send mail
$mail->AddReplyTo("$emailpassword", "Reply to"); //optional
$mail->IsHTML(true);
$mail->Subject = "$messagetitle";
$mail->Body = "$messagetext";
if(!$mail->Send())
echo $mail->ErrorInfo;
else
echo "email was sent";
?>
我得到的错误是: 无效地址:mysmtppassxxxxSMTP -> 错误:无法连接到服务器:连接超时(110)
SMTP 错误:无法连接到 SMTP 主机。 SMTP 错误:无法连接到 SMTP 主机
当我执行 var_dump($email) 时,我得到了
object(PHPMailer)#1 (53)
["Priority"]=>
int(3)
["CharSet"]=>
string(10) "iso-8859-1"
["ContentType"]=>
string(9) "text/html"
["Encoding"]=>
string(4) "8bit"
["ErrorInfo"]=>
string(0) ""
["From"]=>
string(18) "me@gmail.com"
["FromName"]=>
string(18) "me@gmail.com"
["Sender"]=>
string(0) ""
["Subject"]=>
string(4) "test"
["Body"]=>
string(10) "my message"
["AltBody"]=>
string(0) ""
["WordWrap"]=>
int(0)
["Mailer"]=>
string(4) "smtp"
["Sendmail"]=>
string(18) "/usr/sbin/sendmail"
["PluginDir"]=>
string(0) ""
["ConfirmReadingTo"]=>
string(0) ""
["Hostname"]=>
string(0) ""
["MessageID"]=>
string(0) ""
["Host"]=>
string(14) "smtp.gmail.com"
["Port"]=>
int(587)
["Helo"]=>
string(0) ""
["SMTPSecure"]=>
string(3) "ssl"
["SMTPAuth"]=>
bool(true)
["Username"]=>
string(18) "me@gmail.com"
["Password"]=>
string(18) "me@gmail.com"
["Timeout"]=>
int(10)
["SMTPDebug"]=>
int(1)
["SMTPKeepAlive"]=>
bool(false)
["SingleTo"]=>
bool(false)
["SingleToArray"]=>
array(0)
["LE"]=>
string(1) "
"
["DKIM_selector"]=>
string(9) "phpmailer"
["DKIM_identity"]=>
string(0) ""
["DKIM_domain"]=>
string(0) ""
["DKIM_private"]=>
string(0) ""
["action_function"]=>
string(0) ""
["Version"]=>
string(3) "5.1"
["smtp:private"]=>
NULL
["to:private"]=>
array(1)
[0]=>
array(2)
[0]=>
string(18) "jvkrneta@yahoo.com"
[1]=>
string(0) ""
["cc:private"]=>
array(0)
["bcc:private"]=>
array(0)
["ReplyTo:private"]=>
array(1)
["me@gmail.com"]=>
array(2)
[0]=>
string(18) "me@gmail.com"
[1]=>
string(8) "Reply to"
["all_recipients:private"]=>
array(1)
["joovkrneta@yahoo.com"]=>
bool(true)
["attachment:private"]=>
array(0)
["CustomHeader:private"]=>
array(0)
["message_type:private"]=>
string(0) ""
["boundary:private"]=>
array(0)
["language:protected"]=>
array(0)
["error_count:private"]=>
int(0)
["sign_cert_file:private"]=>
string(0) ""
["sign_key_file:private"]=>
string(0) ""
["sign_key_pass:private"]=>
string(0) ""
["exceptions:private"]=>
bool(false)
【问题讨论】:
你将需要 $mail->SMTPSecure = "ssl"; 例如谷歌。某些 SMTP 提供商需要 ssl 才能访问。值得一试。 我又遇到同样的错误! 如果你在非 SSL 服务器上尝试 SSL 也会超时。您尝试连接到哪个服务器?你能转储所有变量除了用户和密码吗? 我正在使用 bluehost 服务器,我可以在不使用 SMTP 的情况下从 php 脚本发送电子邮件,但如果我这样做,我会遇到从我的服务器发送大量电子邮件的问题。数据可以正常发送到 php 页面,我有一个用“,”分隔的电子邮件列表,我将其分解并循环发送电子邮件 正如迈克尔所说,你能转储所有变量吗?关键是谈论协议和使用的地址。 【参考方案1】:$mail->AddAddress()
部分的语法无效。
将其从 $mail->AddAddress("$emailChunks[$i]");
更改为 $mail->AddAddress("$emailChunks[$i]");
基本上,解析器无法识别下标不是字符串的一部分。
本文更深入地解释它:Can I subscript an array variable inside a double quoted PHP string?
【讨论】:
更改 SMTP 后出现同样的错误 -> 错误:无法连接到服务器:连接超时 (110) SMTP 错误:无法连接到 SMTP 主机。 SMTP 错误:无法连接到 SMTP 主机。以上是关于php使用SMTP发送电子邮件[重复]的主要内容,如果未能解决你的问题,请参考以下文章