PHPMailer是别人封装好的一个发送邮件的库,用起来很方便。其支持mail、sendmail和smtp的方式可以到https://code.google.com/a/apache-extras.org/p/phpmailer/downloads/list去下载最新版本的。下面通过gmail smtp发送邮件为例来说明smtp使用方法。
代码如下 | 复制代码 |
$mail = new PHPMailer(); if(!$mail->Send()) { |
上面是核心代码,下面我们综合一下实例。
按如下示例编写代码即可实现php在线发送邮件.
一:前台表单
代码如下 | 复制代码 |
<html> |
二:后台PHP程序
代码如下 | 复制代码 |
$mail->From = "user@xxxx.com"; //邮件发送者email地址 //$mail->AddAttachment("/var/tmp/file.tar.gz"); // 添加附件 $mail->Subject = "PHPMailer测试邮件"; //邮件标题 if(!$mail->Send()) echo "邮件发送成功"; |
我的PHPMailer发送邮件代码
代码如下 | 复制代码 |
header("Content-type:text/html;charset=utf-8"); $mail = new PHPMailer(); |
在使用PHPMailer发送邮件报错Msg:stream_socket_enable_crypto(): this stream does not support SSL/crypto,
出现这种情况请输出phpinfo()看下openssl这个扩展没有安装。
查找php安装时源码包的位置以/usr/local/src/php/php-5.3为例子
代码如下 | 复制代码 |
cd /usr/local/src/php/php-5.3/ext/openssl /usr/local/php/bin/phpize |
可能会出现下面的错误
代码如下 | 复制代码 |
Cannot find config.m4. Make sure that you run ‘/usr/local/php/bin/phpize’ in the top level source directory of the module |
解决办法:
代码如下 | 复制代码 |
mv config0.m4 config.m4 Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/ |
/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/ 改目录下回生成一个openssl.so文件,找到php的配
置文件,在扩展区域添加
代码如下 | 复制代码 |
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/openssl.so |
如果你配置了还不能发送邮箱我们可以尝试在linux中直接使用mail函数直接发送邮件哦。
本文章来给各位同学详细介绍关于利用php中mail函数发送带有附件的邮件,有需要了解学习的朋友不防进入参考。mail函数,发送邮件
语法: mail(to,subject,message,headers,parameters)
to 规定邮件的接收者
subject 规定邮件的主题。该参数不能包含任何换行字符
message 规定要发送的消息
headers 规定额外的报头,比如 From, Cc 以及 Bcc
parameters 规定 sendmail 程序的额外参数。
碰到的主要问题是乱码问题,刚开始是某些客户端接收邮件时好(比如QQ邮箱,估计带自动那个识别编码)的有些不foxmail、ipad显示乱码,解决方式正确的设置这个mail的headers就行了,下面是我使用的完美的无乱码的例子。
在PHP中配置php.ini文件过程分为两个步骤:
1.先找到你放置所有PHP,Apache,MySQL文件的地方,在PHP文件夹里你可以发现有一个文件:php.ini,打开后,找到mail function地方,将原来的配置代码改为如下(仅对windows系统):
[mail function]
; For Win32 only.
SMTP =smtp.sohu.com
mtp_port=25
; For Win32 only.
sendmail_from = 填上你的电子邮件全称。
此处为以sohu的邮件服务器设置,如果你用163的邮箱,则设置为:smtp.163.com
2.在C盘搜索php.ini,选择不是快捷方式的那一个php.ini,应该在C/WINDOWS里面的,打开它,如上面一样修改它,保存。
设置完后,记得重启Apache服务器,然后mail()函数就可以用了。
例
代码如下 | 复制代码 |
<?php $headers .= "Content-type:text/html; charset=utf-8"; mail($to,$subject,$message,$headers); |
上面函数不可以带附件了,下面我们升级一下
代码如下 | 复制代码 |
<?php class Mail { private $filename; private $boundary; private $eol; //每行末尾所加的换行符类型
public function setFromaddr($fromaddr) { public function getTopic() {
public function getContent() {
public function setToaddr($toaddr) {
public function getDomain() { public function setDomain($domain) {
$this->boundary= '--'.substr(md5(time().rand(1000,2000)),0,16); } private function getUniq_id(){ $this->uniqid= md5(microtime().time().rand(1,100)); } private function outputCommonHeader(){ private function mime_content_type ( $f )
return 1;
if(mail($this->toaddr,$this->topic,$this->msg,$this->header)){ return 1; /* $this->attachmentToBase64($this->attach); if(mail($this->toaddr,$this->topic,$this->msg,$this->header)){ return 1; } return 1; public function send(){ if(empty($this->attach)&&empty($this->cc)){ }else if(empty($this->attach)){ }else if(empty($this->cc)){ }else if(!empty($this->toaddr)&&!empty($this->topic)&&!empty($this->cc)&&!empty($this->content)&&!empty($this->attach)){ |
示例代码,有些变量需要上下文环境:
代码如下 | 复制代码 |
$m = new Mail(); |
优点:使用方便就一个简单的函数
缺点:需要php.ini支持该函数,如果某些服务器不支持而又不能改环境那就不行了而且总是不稳定,发的有时能收到有时不能
phpmailer发送邮件功能很强大,今天真正的体验一下,简单说一下配置,本人是在thinkphp中是用的
配置步骤:
1.后台配置发送邮件类,位置admin/common/common.php
中
代码如下 | 复制代码 |
function sendmail($tomail,$title,$content) /*邮件设置信息*/ Vendor('phpmailer.class#phpmailer'); $mail->CharSet ="UTF-8";//设定邮件编码 } |
2:配置文件中配置参数:
代码如下 | 复制代码 |
/*邮件设置*/ |
3.测试发送代码:
代码如下 | 复制代码 |
sendmail(’11234@126.com‘,‘您好’,‘我是内容’); |
主要的改进如下:
1、新增了listMessages方法,用于列表邮件列表,且带有分页功能,更加方便调用
/**
* listMessages - 获取邮件列表
* @param $page - 第几页
* @param $per_page - 每页显示多少封邮件
* @param $sort - 邮件排序,如:array('by' => 'date', 'direction' => 'desc')
* */
function listMessages($page = 1, $per_page = 25, $sort = null){}
2、新增了两个编码转换的方法,主要用于对邮件的相关信息进行编码转换。
调用方法如下:
代码如下 | 复制代码 |
include("receivemail.class.php"); 运行结果大致如下: Array [total] => 47
|
receivemail.class.php类文件
代码如下 | 复制代码 |
<?php $mail_header=imap_header($this->marubox,$mid); $headers=imap_headers($this->marubox); function GetAttach($mid,$path) // Get Atteced File from Mail $struckture = imap_fetchstructure($this->marubox,$mid); imap_close($this->marubox,CL_EXPUNGE); |
面是一个php邮件发送的类的一个函数。
代码如下 | 复制代码 |
function sendmail($to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = "") if($mailtype=="HTML"){ $header .= "To: ".$to."rn"; if ($cc != "") { $header .= "From: 报名邮件.<".$from.">rn"; $header .= "Message-ID: <".date("YmdHis", $sec).".".($msec*1000000).".".$mail_from.">rn"; $TO = explode(",", $this->strip_comment($to)); if ($cc != "") { if ($bcc != "") { $sent = TRUE; foreach ($TO as $rcpt_to) { if (!$this->smtp_sockopen($rcpt_to)) { if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $utfheader, $body)) { fclose($this->sock); $this->log_write("Disconnected from remote hostn"); |
我们如何调用这个类呢?
再看示例
代码如下 | 复制代码 |
include("sendmail.php");//发送邮件类 $smtpemailto = "dianzhong@126.com";//发送给谁 $utfmailbody = iconv("UTF-8","GB2312",$mailbody);//转换邮件编码 |
在这里需要一个smtp服务器。我们可以注册一个126的邮箱。 在上面的代码中,修改成你自己注册的邮箱地址和用户名、密码即可。