利用PHPMailer扩展类库来实现发送功能
本次使用的新浪邮箱作为发送方,使用其他邮箱也是一样的方式结果。
不同的可能就是对发送信息的敏感和拦截程度不同
一、 登录新浪邮箱,打开设置找到带有smtp字样的页面
新浪邮箱
测试账号:131*
把所有状态均设为打开,每次打开都需要发送验证才能打开
SMTP服务器地址我们要保存下来,后面需要贴到代码中
成功后,即可得到授权密码。记得保存,后面同样会用到
至此,邮箱我们已经设置完毕。
小结:申请成功后,我们会得到一个唯一授权码,我们还需要得到SMTP服务器的地址:SMTP服务器:smtp.sina.com
下面是安装PHPMailer扩展类的两种方式
本次我们用第二种
- 使用git克隆 PHPMailer扩展类库
在根目录下创建一个空文件夹mall
在github上找到PHPMailer的扩展类库并克隆到项目根目录下
下载地址:https://github.com/PHPMailer/PHPMailer
复制该地址到项目根目录下,打开命令行,使用git clone 进行克隆
复制:git clone git@github.com:PHPMailer/PHPMailer.git
执行
到这一步,就是克隆好了。
- 利用composer 安装
命令:
composer require phpmailer/phpmailer
安装好PHPMailer后应用到代码中
现在我们在根目录下新建index.php,并复制代码进去
<?php
#!/bin/bash
/**
* User: hzbskak
* Date: 2019/12/25 - 14:54
*/
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'vendor/autoload.php';
class Email{
public static function sendEmail($email,$body){
$mail = new PHPMailer(true);
try {
//使用STMP服务
$mail->isSMTP();
//这里使用我们第二步设置的stmp服务地址
$mail->Host = "smtp.sina.com";
//设置是否进行权限校验
$mail->SMTPAuth = true;
//第二步中登录网易邮箱的账号
$mail->Username = "hzbskak@sina.com";
//客户端授权密码,注意不是登录密码
$mail->Password = "这里是你获取到的授权码";
//使用ssl协议
$mail->SMTPSecure = 'ssl';
//端口设置
$mail->Port = 465;
//字符集设置,防止中文乱码
$mail->CharSet= "utf-8";
//设置邮箱的来源,邮箱与$mail->Username一致
$mail->setFrom("hzbskak@sina.com", "测试来源");
//设置收件的邮箱地址
$mail->addAddress($email);
//设置回复地址,一般与来源一致
$mail->addReplyTo("hzbskak@sina.com", "测试来源");
$mail->isHTML(true);
//标题
$mail->Subject = '测试标题';
//正文
$mail->Body = $body;
$mail->send();
echo 'ok';
return true;
} catch (Exception $e) {
var_dump( array('errCode'=>-1,'msg'=>$mail->ErrorInfo));
}
}
}
Email::sendEmail('接收方邮箱号', '测试内容体');
// 需要修改的地方
$mail->Username = "你的邮箱号";
$mail->Password = "你的授权码";
// 这个是调用方法
Email::sendEmail('接收方邮箱号', '测试内容体'); // 这是调用方法
// 在实际应用项目中我们可以把这个方法放到我们调用的方法中去
Email::sendEmail();
至此代码结束
我们来测试一下
测试链接
返回“ok”,我们到接收方的邮箱中去看一下是否成功接收到
问题总结
即使邮箱服务器返回"ok"但是也只能是表明一方已经成功,还需要验证接收方是否真正可以接收到邮件。
如果没有接收到邮件,那么很有可能是发送方邮箱服务器返回给你申请授权码的邮箱中一封邮件。可能是550报错。涉及到了一些敏感词汇等,
你可以根据这个报错,来修改代码中的body体内容,或者标题等,如果顺着这个思路找不到解决问题的办法,也可以咨询客服,他们会告诉你具体的错误。