本文总结下平常经常用到的三个邮件收发协议包文件——sendEmail、jmail、phpmailer
一、sendEmail
SendEmail是一个轻量级的、命令行SMTP的电子邮件客户端。如果你有需要从命令行发送电子邮件,该用该包将是非常棒的,其上具有:使用简单,功能丰富。其时其也是一个跨平台的软件包。在LINUX下使用时需要安装perl支持。因为其是通过.pl代码实的程序,可以直接通过文件编辑工具查看其源代码。window下不需要额外安装perl包。
sendEmail的常用参数如下: ? ?
-m:邮件的内容,如果不带此参数,会提示用户手工输入
-f:邮件发送者
-s:STMP服务器的域名或者IP地址
-u:邮件的主题
-t:邮件接收者,如果需要发送多个,使用”,”隔开邮件人地址即可
-xu:表示SMTP验证的用户名
-xp:SMTP验证的密码
-o:文本信息字符集,若无 -o参数,发送的含有中文时会有乱码问题!使用该参数可以选择utf-8等编码。
具体可以到http://caspian.dotconf.net/menu/Software/SendEmail/下载相应的版本或查看详细介绍(也可能通过帮助文件查看使用介绍)。linux下的版本可以通过wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz下载。下载完成后解包
增加执行权限就可以使用。无需二次编绎。
二、jmail
jmail是一个第三方邮件操作组件,通常位于web服务器端,和站点程序紧密配合来接收及提交邮件到邮件服务器的控件,让网站拥有发送邮件既接收邮件的功能。在进行程序编写时(如VB、C#、Delphi),也经常会用到其dll文件。不过该dll包经常会被杀毒软件当做病毒处理。不过很多病毒程序也经常会用到该组件用于密码等获取内容发送到指定邮箱。
下面是VB调用jmail发送邮件的一段代码:
Option?Explicit?
Sub?SendMail(Optional ByVal?sSubject?As String,?Optional ByVal?sBody?As String,?Optional ByVal?sFileName?As String)?
Dim?Jmail?
Set?Jmail = CreateObject(?“jmail.Message “)?
If?sFileName < >?” “?Then?Jmail.AddAttachment sFileName?‘附件?
Jmail.Charset =?“gb2312 “?
Jmail.Silent =?False?
Jmail.Priority =?1?‘邮件状态,1-5 1为最高?
Jmail.MailServerUserName =?“test_yk “?‘Email帐号?
Jmail.MailServerPassWord =?“******* “?‘Email密码?
Jmail.FromName =?“邮件 “?‘发信人姓名?
Jmail.From =?“test_yk@163.com “?‘发邮件地址地址?
Jmail.Subject = sSubject?‘主题?
Jmail.AddRecipient?“test_yk@163.com “?‘收信人地址?
Jmail.Body = sBody?‘信件正文?
Jmail.Send (?“smtp.163.com “)?‘SMTP服务器,如smtp.sohu.com
Set?Jmail =?Nothing?
End Sub?
Sub?Command1_Click()?
SendMail?“测试 “,?“我爱你 “,?“这里填附件地址 “?
MsgBox?“OK “?
End Sub
下面是VB调用jmail发送邮件的一段代码:
Option?Explicit?
Sub?SendMail(Optional ByVal?sSubject?As String,?Optional ByVal?sBody?As String,?Optional ByVal?sFileName?As String)?
Dim?Jmail?
Set?Jmail = CreateObject(?“jmail.Message “)?
If?sFileName < >?” “?Then?Jmail.AddAttachment sFileName?‘附件?
Jmail.Charset =?“gb2312 “?
Jmail.Silent =?False?
Jmail.Priority =?1?‘邮件状态,1-5 1为最高?
Jmail.MailServerUserName =?“test_yk “?‘Email帐号?
Jmail.MailServerPassWord =?“******* “?‘Email密码?
Jmail.FromName =?“邮件 “?‘发信人姓名?
Jmail.From =?“test_yk@163.com “?‘发邮件地址地址?
Jmail.Subject = sSubject?‘主题?
Jmail.AddRecipient?“test_yk@163.com “?‘收信人地址?
Jmail.Body = sBody?‘信件正文?
Jmail.Send (?“smtp.163.com “)?‘SMTP服务器,如smtp.sohu.com
Set?Jmail =?Nothing?
End Sub?
Sub?Command1_Click()?
SendMail?“测试 “,?“我爱你 “,?“这里填附件地址 “?
MsgBox?“OK “?
End Sub
PHP调用jmail的在web中使用
<?php
$jmail = new COM(‘JMail.Message’)?? or die(‘无法调用Jmail组件’);
$jmail->silent = true; //屏蔽例外错误
$jmail->charset = ‘gb2312’; //否则中文会乱码,也可以使用utf-8
$jmail->From = ‘test_yk@163.com’; //这里理论上是可以不与发件人地址相同的,但用163的试了几次都不行,改成一样的就可以了
$jmail->FromName = ‘Test’;
$jmail->AddRecipient(‘abc1@163.com’); //可添加多个邮件接受者
//$jmail->AddRecipient(‘abc2@163.com’);
//$jmail->AddRecipient(‘abc3@163.com’);
$jmail->Subject = ’email test.’;
$jmail->Body = ‘this is test email.’;
$jmail->MailServerUserName = ‘test_yk@163.com’; //发信邮件账号
$jmail->MailServerPassword = ‘******’; //账户的密码
try{
??? $email = $jmail->Send(‘smtp.163.com’);
??? if($email) echo ‘发送成功’;
??? else echo ‘发送失败’;
} catch (Exception $e){
??? echo $e->getMessage();
}
?>
$jmail = new COM(‘JMail.Message’)?? or die(‘无法调用Jmail组件’);
$jmail->silent = true; //屏蔽例外错误
$jmail->charset = ‘gb2312’; //否则中文会乱码,也可以使用utf-8
$jmail->From = ‘test_yk@163.com’; //这里理论上是可以不与发件人地址相同的,但用163的试了几次都不行,改成一样的就可以了
$jmail->FromName = ‘Test’;
$jmail->AddRecipient(‘abc1@163.com’); //可添加多个邮件接受者
//$jmail->AddRecipient(‘abc2@163.com’);
//$jmail->AddRecipient(‘abc3@163.com’);
$jmail->Subject = ’email test.’;
$jmail->Body = ‘this is test email.’;
$jmail->MailServerUserName = ‘test_yk@163.com’; //发信邮件账号
$jmail->MailServerPassword = ‘******’; //账户的密码
try{
??? $email = $jmail->Send(‘smtp.163.com’);
??? if($email) echo ‘发送成功’;
??? else echo ‘发送失败’;
} catch (Exception $e){
??? echo $e->getMessage();
}
?>
jmail相关的衍生版本也很多,如:Open JMail API?、java jmail ……具体可以到http://sourceforge.net上查找。
三、phpmailer
PHPMailer是一个用PHP写的用于邮件发送的类,有点像Jmail,主要用于php站点程序里进行mail调用。其官方站点为http://phpmailer.worxware.com/?,将相应的PHP版本的类包下载完后,解压即可调用。
调用方法有两种。一种是:在php.ini文件中增加一行include_path=” phpmailer解包的路径”;第二种方法是:和要使用的php代码主在一块使用,require(“phpmailer/class.phpmailer.php”); 进行调用。
PHPMailer的主要功能特点:
- 支持邮件 s/mime加密的数字签名
- 支持邮件多个 TOs, CCs, BCCs and REPLY-TOs
- 可以工作在任何服务器平台,所以不用担心WIN平台无法发送邮件的问题的
- 支持文本/HTML格式邮件
- 可以嵌入image图像
- 对于邮件客户端不支持HTML阅读的进行支持
- 功能强大的发送邮件调试功能debug
- 自定义邮件header
- 冗余SMTP服务器支持
- 支持8bit, base64, binary, and quoted-printable 编码
- 文字自动换行
- 支持多附件发送功能
- 支持SMTP服务器验证功能
- 在Sendmail,?qmail,?Postfix,?Gmail, Imail, Exchange 等平台测试成功
- 提供的下载文件中,包括内容详细的说明文档及示例说明,所以不用担心难于上手的问题!
- PHPMailer?非常小巧、简单、方便、快捷
注意:
1、在使用时若进行中文的发送要加字符集设置$mail->CharSet = “GB2312”;??(或utf-8)
2、用它来群发邮件的话,记得修改包含文件函数,如: require(“phpmailer/class.phpmailer.php”); 改为
require_once(“phpmailer/class.phpmailer.php”); 否则的话会产生类的重定义。
require_once(“phpmailer/class.phpmailer.php”); 否则的话会产生类的重定义。
用法:
class
Mails{
?
//$address,$username,$cont
?
function
setmail(
$address
,
$username
,
$cont
){
?
$mail
=
new
PHPMailer();
//建立邮件发送类
?
$mail
->CharSet =
"UTF-8"
;
?
$mail
->IsSMTP();
// 使用SMTP方式发送
?
<span style=
"color: #ff0000;"
>
$mail
->Host =
"smtp.qq.com"
;
// <strong>您的企业邮局域名</strong></span>
?
$mail
->SMTPAuth = true;
// 启用SMTP验证功能
?
$mail
->Username =
"<a href="
mailto:123201564@qq.com
">123456@qq.com</a>"
;
// 邮局用户名(请填写完整的email地址)
?
$mail
->Password =
"123456"
;
// 邮局密码
?
$mail
->Port=25;
?
$mail
->From =
"<a href="
mailto:123201564@qq.com
">123456@qq.com</a>"
;
//邮件发送者email地址
?
$mail
->FromName =
"name"
;
?
$mail
->AddAddress(
"$address"
,
"$username"
);
//收件人地址,可以替换成任何想要接收邮件的email信箱,格式是AddAddress("收件人email","收件人姓名")
?
//$mail->AddReplyTo("", "");
?
//$mail->AddAttachment("/var/tmp/file.tar.gz"); // 添加附件
?
//$mail->IsHTML(true); // set email format to HTML //是否使用HTML格式
?
$mail
->Subject =
"请重新设置您的密码"
;
//邮件标题
?
$mail
->Body =
$cont
;
//邮件内容
?
if
(!(
$mail
->Send())){
?
return
"邮件发送失败.错误原因: "
.
$mail
->ErrorInfo;
?
}
?
return
true;
?
}
?
}
详细用法不再介绍,其下载下来的包里有具体的样例。包可以到http://sourceforge.net/projects/phpmailer/files/phpmailer%20for%20php5_6/下载。