您的位置:首页 > 编程语言 > PHP开发

PHP实现邮件发送(PHPMailer+QQ邮箱)

2017-03-27 18:20 204 查看
  最近复习原生PHP,看到邮件函数这一部分,就试着写一下邮件功能,在网上搜了一下,主要有两种实现方式:

  1.PHP自带的mail()函数

  2.封装的smtp邮件发送类

下面来一一介绍

PHP自带的mail()函数

浏览一下文档,mail()函数的注释如下:



即若要使用mail()函数,需要本地安装一个邮件系统或者必须设置一台不需要中继的邮件发送服务器,但现在要找到一台不需要身份验证的邮件发送中继几乎不可能,所以使用mail()函数往往无法成功发送电子邮件。对使用邮件系统感兴趣的,可以自己研究。而使用封装的smtp邮件发送类来实现,则要方便的多。

封装的smtp邮件发送类

封装的smtp邮件发送类, 网上可以找到很多,其中开源的PHPMailer是其中比较好用的一个,只需简单配置,即可使用,想了解更多,请移步PHPMailer

PHPMailer开源地址:https://github.com/PHPMailer/PHPMailer

直接把项目clone下来,或者下载zip压缩文件,在配置之前,需要开启邮箱的SMTP功能,以QQ邮箱为例:

  

  登录QQ邮箱,点击设置

 


  账户

 


  拉到最后,找到

  


  根据提示,开启前两项服务,然后生成授权码,记下来,之后配置会用

  


项目的README文件提供了一个简单的引入例子

A Simple Example

<?php
require 'PHPMailerAutoload.php';

$mail = new PHPMailer;

//$mail->SMTPDebug = 3;   // Enable verbose debug output

$mail->isSMTP();          // Set mailer to use SMTP
$mail->Host = 'smtp1.example.com;smtp2.example.com';
// Specify main and backup SMTP servers
$mail->SMTPAuth = true;   // Enable SMTP authentication
$mail->Username = 'user@example.com'; // SMTP username
$mail->Password = 'secret';           // SMTP password
$mail->SMTPSecure = 'tls';
// Enable TLS encryption, `ssl` also accepted
$mail->Port = 587;         // TCP port to connect to

$mail->setFrom('from@example.com', 'Mailer');
$mail->addAddress('joe@example.net', 'Joe User');
// Add a recipient
$mail->addAddress('ellen@example.com');
// Name is optional
$mail->addReplyTo('info@example.com', 'Information');
$mail->addCC('cc@example.com');
$mail->addBCC('bcc@example.com');

$mail->addAttachment('/var/tmp/file.tar.gz');
// Add attachments
$mail->addAttachment('/tmp/image.jpg', 'new.jpg');
// Optional name
$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>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}


在PHPMailer文件夹下,新建一个index.php文件,复制粘贴以上代码,修改各项配置



由于使用了SSL连接,所以需要开启PHP的openssl扩展,这里不再赘述,配置完之后,放在Web服务器下,访问index.php,正常的话,就能收到一封测试邮件了,如果失败,可以根据报错信息进行排查。

最小化安装(推荐)

直接把整个PHPMailer项目放到服务器上,未免太浪费空间,而且项目中的许多文件都是没用的,所以README文件中也提到了最小化安装



文中提到class.phpmailer.php是必需的,另外的文件是可选的,因为我们使用的是SMTP,所以还需要class.smtp.php,如果你使用了POP3,则需要引入class.pop3.php,新建一个Mail文件夹,导入以上两个文件,新建index.html,send.php,文件结构如下:



两个文件代码如下

index.html

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>phpmailer Unit Test</title>
</head>
<body>
<h3>phpmailer Unit Test</h3>
请你输入<font color="#FF6666">收信</font>的邮箱地址:
<form name="phpmailer" action="./send.php" method="post">
邮箱地址: <input type="text" size="50" name="address" />
<br/>
<input type="submit" value="发送"/>
</form>
</body>
</html>


send.php

<?php
require("class.phpmailer.php"); //下载的文件必须放在该文件所在目录
require("class.smtp.php");
$mail = new PHPMailer(); //建立邮件发送类
$address = $_POST['address'];
$mail->IsSMTP(); // 使用SMTP方式发送
$mail->CharSet='UTF-8';// 设置邮件的字符编码
$mail->Host = "smtp.qq.com"; // 您的企业邮局域名
$mail->SMTPAuth = true; // 启用SMTP验证功能
$mail->SMTPSecure = "ssl";
$mail->Port = "465"; //SMTP端口
$mail->Username = "xxx@qq.com"; // 邮箱用户名(请填写完整的email地址)
$mail->Password = "xxx"; // 授权码
$mail->From = "xxx@qq.com"; //邮件发送者email地址
$mail->FromName = "您的名称";
$mail->AddAddress("$address", "");//收件人地址,格式是AddAddress("收件人email","收件人姓名")
$mail->AddReplyTo("", "");
$mail->AddAttachment("/var/tmp/file.tar.gz"); // 添加附件
$mail->IsHTML(true); // set email format to HTML //是否使用HTML格式
$mail->Subject = "PHPMailer测试邮件"; //邮件标题
$mail->Body = "Hello,这是测试邮件"; //邮件内容
$mail->AltBody = "This is the body in plain text for non-HTML mail clients"; //附加信息,可以省略
if(!$mail->Send()){
echo "邮件发送失败. <p>";
echo "错误原因: " . $mail->ErrorInfo;
exit;
}
echo "邮件发送成功";
?>


配置参数和上面的一样,不再赘述,之后点击index.html文件



输入邮箱地址就可以啦





以上代码均为测试,若用于生产环境,可以对其进行封装。

如有问题,欢迎回复交流

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php 邮件