Yii 1.1.17使用PHPMailer发送邮件失败,提示未连接报错
解决Yii 1.1.17 + PHP7.1.8 使用PHPMailer发送Gmail邮件的问题
我来帮你排查这个邮件发送的问题!错误提示Called Mail() without being connected说明PHPMailer还没成功连接到Gmail的SMTP服务器就尝试发邮件了,咱们一步步来修复:
1. 修正控制器代码的语法错误
你控制器里的SetFrom行多了一个闭合括号,这会导致代码执行中断,先把这个语法问题解决:
// 原错误代码 $mail->SetFrom('MyGmailId@gmail.com','')); // 修改后 $mail->SetFrom('MyGmailId@gmail.com','');
2. 完善SMTP组件配置
你的配置里缺少了SSL加密设置,Gmail的465端口需要启用SSL加密,另外补充一些关键参数确保连接正常:
'components' => array( 'Smtpmail'=>array( 'class'=>'application.extensions.smtpmail.PHPMailer', 'Host'=>"smtp.gmail.com", 'Username'=>'MyGmailId@gmail.com', 'Password'=>'myPassword', // 如果开启了两步验证,这里要用App密码 'Mailer'=>'smtp', 'Port'=>'465', 'SMTPAuth'=>true, 'SMTPSecure' => 'ssl', // 新增:启用SSL加密 'SMTPDebug' => 0, // 调试时可以设为2,查看详细连接日志 'IsSMTP' => true, // 明确指定使用SMTP方式 ), )
3. 检查Gmail账号的安全设置
如果是普通Gmail账号:
- 暂时开启“不太安全的应用访问”(注意:测试完成后建议关闭,改用App密码以提升账号安全性)
如果开启了两步验证: - 必须在Google账号设置中生成应用专用密码,并用这个密码替换配置里的
myPassword
4. 验证扩展文件结构
确保你的extensions目录下有smtpmail文件夹,且里面包含PHPMailer的核心文件(比如PHPMailer.php、class.smtp.php等),Yii才能正确加载这个扩展。如果扩展版本太老,建议更新到兼容PHP7.1的PHPMailer 5.2.x系列版本。
5. 修改后的控制器完整代码示例
$mail = Yii::app()->Smtpmail; $mail->CharSet = "UTF-8"; $mail->IsSMTP(); // 明确启用SMTP模式 $mail->SetFrom('MyGmailId@gmail.com', '你的发件人名称'); $mail->Subject = $subject; $mail->MsgHTML($text); $mail->AddAddress($email, "收件人名称"); // 调试时可以打开SMTPDebug查看详细日志 // $mail->SMTPDebug = 2; if (!$mail->Send()) { return $mail->ErrorInfo; } else { return true; }
按照这些步骤调整后,应该能解决连接失败的问题。如果还是有错误,可以打开SMTPDebug=2查看具体的连接日志,根据日志进一步排查。
内容的提问来源于stack exchange,提问作者S Tajeri
相关产品推荐
相关产品推荐

