实验室要举办一个会议,要我做一个会议的网站。使用了开源的openconf,十分省事。但发邮件简单的使用了PHP的mail函数,没有经过SMTP认证,发送的邮件很可能出现在对方的垃圾箱里,甚至会被退信。搜索了一下有很多PHP类库支持利用SMTP发送邮件,比如PHPMailer。
下面是利用PHPMailer实现的一个函数以及简单的测试代码。【注意,运行此函数需要openconf源代码根目录下的class.phpmailer.php和class.smtp.php】
请将“yourgmail@gmail.com”替换成你的gmail,写上对应密码。将“test@qq.com”改为要你要测试的邮箱。
<?php
//下面定义一个发送邮件的函数,已经测试通过。
//$sendto_email:邮件发送地址
//$subject:邮件主题
//$body:邮件正文内容
//$sendto_name邮件接受方的姓名,发送方起的名字。一般可省。
function stmp_mail($sendto_email, $subject = null, $body = null, $sendto_name = null) {
//vendor ( "PHPMailer.class#phpmailer" ); //导入函数包的类class.phpmailer.php
require_once("class.phpmailer.php");
$mail = new PHPMailer (); //新建一个邮件发送类对象
$mail->IsSMTP (); // send via SMTP
$mail->Port = 25; //发送端口
$mail->Host = "ssl://smtp.gmail.com:465"; // SMTP 邮件服务器地址,这里需要替换为发送邮件的邮箱所在的邮件服务器地址, 这里使用了gmail的SMTP设置
$mail->SMTPAuth = true; // turn on SMTP authentication 邮件服务器验证开
$mail->Username = "yourgmail@gmail.com"; // SMTP服务器上此邮箱的用户名,有的只需要@前面的部分,有的需要全名。请替换为正确的邮箱用户名
$mail->Password = "******"; // SMTP服务器上该邮箱的密码,请替换为正确的密码
$mail->From = "yourgmail@gmail.com"; // SMTP服务器上发送此邮件的邮箱,请替换为正确的邮箱,$mail->Username 的值是对应的。
$mail->FromName = "yourName"; // 真实发件人的姓名等信息,这里根据需要填写
$mail->CharSet = "utf-8"; // 这里指定字符集!
//$mail->Encoding = "base64";
$mail->AddAddress ( $sendto_email, $sendto_name ); // 收件人邮箱和姓名
//$mail->AddReplyTo('yourgmail@gmail.com',"管理员");//这一项根据需要而设
//$mail->WordWrap = 50; // set word wrap
//$mail->AddAttachment("/var/tmp/file.tar.gz"); // 附件处理
//$mail->AddAttachment("/tmp/image.jpg", "new.jpg");
//$mail->IsHTML ( true ); // send as HTML
$mail->Subject = $subject; // 邮件主题
// 邮件内容
/*
$mail->Body = "<html><head>
<meta http-equiv=”Content-Language” content=”zh-cn”>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″></head>
<body>'.$body.'</body></html>";
$mail->AltBody = "text/html";
*/
$mail->Body = $body;
if (! $mail->Send ()) {
//邮件发送失败
return false;
} else {
//邮件发送成功
return true;
}
}
//function end
?>
将上面代码存为gmail.php,编写下面的main.php
<?php
require_once "gmail.php";
echo "send mail begin";
echo " ";
if(stmp_mail("your@qq.com","subject","body"))
echo "success";
else
echo "failed";
echo " ";
echo "send mail end";
?>
使用浏览器访问mail.php测试。
______________UPDATED 2013.04.27___________________________________
下面市openconf需要做的更改:
- 将上述文件gmail.php放在opencof根目录
- 修改include.php
- 在<?php 下面一行添加
require_once "gmail.php";
- 替换函数oc_mail:
function oc_mail($to, $subject, $body, $hdr='', $enc='quoted-printable') { global $OC_configAR; $headers = (empty($hdr) ? $OC_configAR['OC_mailHeaders'] : $hdr); $headers = "MIME-Version: 1.0\r\n" . $headers . "\r\nContent-Type: text/plain; charset=UTF-8\r\nContent-Transfer-Encoding: " . $enc; $headers = preg_replace("/\r/", "", $headers); return (stmp_mail($to, $subject, $body)); }
- 在<?php 下面一行添加