PHP对邮件的操作处理可能大部分开发者都已经了解,但是对于邮件处理在PHP中到底有几种方式可能只有一个模糊的概念,今天我们针对PHP发送邮件的技术做一次详细的解析,以供大家学习和交流
$to = "w3capi@163.com"; //收件人 $subject = "this is a test"; //邮件主题 $message = "this is a body to test "; //邮件正文 mail($to,$subject,$message);
https://pear.php.net/package/Mail
,在安装有pear工具的服务器中可以直接使用命令:pear install -a Mail
和 pear install -a Mail_mime
快速安装,没有命令权限或者没有安装pear工具的朋友也可以直接下载此类的PHP源码,然后引入就可以了。(注:Mail类依赖 Net/SMTP.php 和 Mail/mime.php,可以到官网搜查并下载:https://pear.php.net/
,最好还是使用pear工具进行安装,这样可以一次性安装所有依赖,否则就需要查找这些Mail接口的依赖并一块下载下来,pear工具的安装及使用请参考《PEAR(PHP Extension and Application Repository) 安装详解》)。如下代码为下载相应类源码并引入的使用示例:// 引入Pear Mail /* //如果使用pear则直接这样写就可以 require_once "Mail.php"; require_once "Mail/mime.php"; */ require_once('Mail.php'); require_once('Mail/mime.php'); require_once('Net/SMTP.php'); $emailInfo = array(); $emailInfo["host"] = "smtp.163.com";//SMTP服务器 $emailInfo["port"] = "25"; //SMTP服务器端口 $emailInfo["username"] = "w3capi@163.com"; //发件人邮箱 $emailInfo["password"] = "password";//发件人邮箱密码 $emailInfo["timeout"] = 10;//网络超时时间,秒 $emailInfo["auth"] = true;//登录验证 $emailInfo["debug"] = true;//调试模式 $mailAddr = array('receiver@163.com'); // 收件人列表 $from = "w3capi@163.com"; // 发件人显示信息,这里必须和发件人邮箱保持一致 $to = implode(',',$mailAddr); // 收件人显示信息 $subject = "这是一封测试邮件"; // 邮件标题 $content = "<h3>this is test.</h3>"; // 邮件正文 $contentType = "text/html; charset=utf-8"; // 邮件正文类型,格式和编码 $crlf = PHP_EOL; //换行符号 Linux: \n Windows: \r\n $mime = new Mail_mime($crlf); $mime->setHTMLBody($content); $param['text_charset'] = 'utf-8'; $param['html_charset'] = 'utf-8'; $param['head_charset'] = 'utf-8'; $body = $mime->get($param); $headers = array(); $headers["From"] = $from; $headers["To"] = $to; $headers["Subject"] = $subject; $headers["Content-Type"] = $contentType; $headers = $mime->headers($headers); $smtp = Mail::factory("smtp", $emailInfo); $mail = $smtp->send($mailAddr, $headers, $body); $smtp->disconnect(); if (PEAR::isError($mail)) { echo 'Email sending failed: ' . $mail->getMessage()."\n"; //发送失败 } else{ echo "success!\n"; //发送成功 }
https://github.com/PHPMailer/PHPMailer/
下载PHPMailer,PHPMailer 可能需要 PHP 的 sockets 扩展支持,而有的SMTP服务器还强制使用SSL加密链接,如:QQ邮箱,那就还需要包含 openssl 扩展。可以使用 phpinfo() 函数查看当前PHP环境是否开启了 socket 和 openssl 扩展模块,如下图所示:composer
方式:require __DIR__.'/PHPMailer/Exception.php'; require __DIR__.'/PHPMailer/PHPMailer.php'; require __DIR__.'/PHPMailer/SMTP.php'; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP; use PHPMailer\PHPMailer\Exception; // Instantiation and passing `true` enables exceptions $mail = new PHPMailer(true); try { //smtp 服务配置 $mail->SMTPDebug = SMTP::DEBUG_SERVER; //打开调试 $mail->isSMTP(); // 使用smtp发送 $mail->Host = 'smtp.163.com'; // smtp 服务器地址,我使用的是163的,所以设置为smtp.163.com $mail->SMTPAuth = true; // 是否进行smtp账号认证 $mail->Username = 'user@example.com'; // SMTP 用户名 $mail->Password = 'secret'; // SMTP 登录密码 $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // 使用的数据传输安全协议 $mail->Port = 25; // SMTP服务器的端口号,一般为25,安全连接为465 //接收人配置 $mail->setFrom('from@example.com', 'Mailer'); $mail->addAddress('joe@example.net', 'Joe User'); // 添加接收人 $mail->addAddress('ellen@example.com'); // 添加一个名称缺省的接收人 $mail->addReplyTo('info@example.com', 'Information'); $mail->addCC('cc@example.com'); $mail->addBCC('bcc@example.com'); // Attachments $mail->addAttachment('/var/tmp/file.tar.gz'); // 添加一个附件 $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // 添加一个自定义名称的附件 // Content $mail->isHTML(true); // 设置邮件内容格式为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'; $mail->send(); echo 'Message has been sent'; } catch (Exception $e) { echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}"; }