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-&gt;AddAddress() 部分的语法无效。

将其从 $mail-&gt;AddAddress("$emailChunks[$i]"); 更改为 $mail-&gt;AddAddress("$emailChunks[$i]");

基本上,解析器无法识别下标不是字符串的一部分。

本文更深入地解释它:Can I subscript an array variable inside a double quoted PHP string?

【讨论】:

更改 SMTP 后出现同样的错误 -> 错误:无法连接到服务器:连接超时 (110) SMTP 错误:无法连接到 SMTP 主机。 SMTP 错误:无法连接到 SMTP 主机。

以上是关于php使用SMTP发送电子邮件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

php电子邮件和smtp [重复]

在gmail上使用smtp发送电子邮件[重复]

如何在 php 中使用 SMTP 发送电子邮件

使用gmail smtp c#发送电子邮件[重复]

如何在 PHP 中使用 SMTP 发送 HTML 电子邮件

无法通过 gmail 从新创建的电子邮件中使用 phpMailer 发送 SMTP 邮件 [重复]