我想在公司每个项目中都会遇到发邮件的问题这两周我都在公司做发邮件的东西本以为很简单的东西却遇到了很多问题现总结到下面
发邮件我用的sun公司的emailjar和activationjar
方法
写在一起用一个方法
public boolean SendEmailTest(String ToEmailStrString TitleString ContentString FromEmail) throws AddressException
{
//ToEmailStr收件人地址
//Title邮件标题
//Content邮件内容
//FromEmail发件人地址
FromEmail=;
// Systemoutprintln(FromEmail);
boolean fnt = false;
Properties props = new Properties();
Session sendMailSession;
Transport transport;
sendMailSession = SessiongetInstance(props null);
propsput(mailsmtphost ); // 是的IP!
propsput(mailsmtpauth true); //允许smtp校验
try
{
transport = sendMailSessiongetTransport(smtp);
nnect(chen); //你在sohu的用户名密码
Message newMessage = new MimeMessage(sendMailSession);
//设置mail主题
String mail_subject=Title;
sunmiscBASEEncoder enc = new sunmiscBASEEncoder();
newMessagesetSubject(=?GB?B?+encencode(mail_subjectgetBytes())+?=);
// newMessagesetSubject(mail_subject); //在winxp上只要在action中转成utf
//设置发信人地址
//String strFrom=cn; // <
// strFrom=new String(strFromgetBytes()_);
// newMessagesetFrom(new InternetAddress(strFrom));
Address address[] = {new InternetAddress(FromEmail)};//改变发件人地址
newMessageaddFrom(address);
//设置收件人地址
newMessagesetRecipient(MessageRecipientTypeTO new InternetAddress(ToEmailStr));
//设置mail正文
newMessagesetSentDate(new javautilDate());
String mail_text=Content;
newMessagesetContent(mail_texttext/plain;charset=gb );
// newMessagesetText(=?GB?B?+encencode(mail_textgetBytes())+?=);
//newMessagesetText(mail_text);
newMessagesaveChanges(); //保存发送信息
transportsendMessage(newMessagenewMessagegetRecipients(MessageRecipientTypeTO)); //发送邮件
fnt=true;
transportclose();
}
catch(Exception e)
{
fnt=false;
Systemoutprintln(e);
}
Systemoutprintln(aaaaaaaaaaaaa);
return fnt;
}
如果想分开哪么可以写成
import javaxmailAuthenticator;
import javaxmailPasswordAuthentication;
public class Email_Autherticator extends Authenticator {
String username = hackboyo;//用户名
String password = woyao;//密码
public Email_Autherticator() {
super();
}
import javautilDate;
import javautilProperties;
import javaxmailAddress;
import javaxmailAuthenticator;
import javaxmailMessage;
import javaxmailSendFailedException;
import javaxmailSession;
import javaxmailTransport;
import javaxmailinternetInternetAddress;
import javaxmailinternetMimeMessage;
public class Mail {
private String host = ;
private String mail_head_name = this is head of this mail;
private String mail_head_value = this is head of this mail;
private String mail_to = ;
private String mail_from = ;
private String mail_subject = this is the subject of this test mail;
private String mail_body = this is mail_body of this test mail;
private String personalName = 我的邮件;
public void sendMail() throws SendFailedException{
try {
Properties props = new Properties();//获取系统环境
Authenticator auth = new Email_Autherticator();//进行邮件服务用户认证
propsput(mailsmtphost host);
propsput(mailsmtpauth true);
Systemoutprintln(props);
Session session = SessiongetDefaultInstance(propsauth);
//设置session和邮件服务器进行通讯
MimeMessage message = new MimeMessage(session);
messagesetContent(Hellotext/plain);//设置邮件格式
messagesetSubject(mail_subject);//设置邮件主题
messagesetText(mail_body);//设置邮件内容
messagesetHeader(mail_head_name mail_head_value);//设置邮件标题
messagesetSentDate(new Date());//设置邮件发送时期
Address address = new InternetAddress(mail_frompersonalName);
messagesetFrom(address);//设置邮件发送者的地址
Address toaddress = new InternetAddress(mail_to);//设置邮件接收者的地址
messageaddRecipient(MessageRecipientTypeTOtoaddress);
Systemoutprintln(message);
Transportsend(message);
Systemoutprintln(Send Mail Ok!);
} catch (Exception e) {
eprintStackTrace();
}
//return flag;
}
}
public Email_Autherticator(String userString pwd){
super();
username = user;
password = pwd;
}
public PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(usernamepassword);
}
}
====================其中遇到的问题以及解决方案=========================
发邮件收不到的问题
其中如果发送失败一般是因为你的密码用户名或者是smtp设置错误
smtp:QQ的是 的是 gmail的是
我觉得一般的邮箱应该都是 smtp邮
propsput(mailsmtpauth true); //允许smtp校验
以前的邮箱这个可以设成false但是现在的一般都不行的都需要smtp校验
另外你有时用别的邮箱做代理会发现报错说使用 pop的错误因为现在很多邮箱的 pop 协议默认是关闭的
如果pop 协议关闭就不能用其做代理我试着注册过gmail雅虎qq的邮箱都是注册后几周后才开通
而且qq的邮箱是邮箱开通后两周才能手懂开通pop 协议在个人设置里有
关于乱码的问题特别是移植的问题这个问题困惑了我好几天
但最后还是找到了决绝方案
在winxp下
只要你的title和comtent在后台发送前有转码基本就没有问题的我的项目页面是用utf在后台我又做了一下
转码发送时基本是没又乱码的
在Linux下
我用的是在Linux下用的weblogic在winxp下测试没问题的但在Linux下会遇到很变态的乱码大概是因为字符编码和传输编码(ContentTransferEncoding)的问题最后看到一篇文章()才解决解决方案
邮件的标题乱码解决 //设置mail主题
String mail_subject=Title;
sunmiscBASEEncoder enc = new sunmiscBASEEncoder();
newMessagesetSubject(=?GB?B?+encencode(mail_subjectgetBytes())+?=);
如果是在winxp上只需要newMessagesetSubject(mail_subject);就可以了
邮件的正文这样是不行的解决方案是String mail_text=Content;
newMessagesetContent(mail_texttext/plain;charset=gb );
而在winxp上只需要newMessagesetText(mail_text);就可以了
剩下的就没有什么问题了其余的都是很简单的问题有时还会遇到你发的邮件有的邮箱可以收到
可是有的邮箱收不到我们公司的邮件服务器就是这样的qq邮箱是收不到的但问题我们还不知道
最后没办法我就只有用qq邮箱代理了但是用别的邮箱代理还是有问题的因为我用循环测试时发现
如果qq邮箱用去循环只有前几条可以发出去连续几封后就会有错估计是qq邮箱的服务器发现异常暂时会把你的邮箱关闭但一会儿就正常了如果是的邮箱我测试时用的但到快五十封邮件时就不行了原因估计是一样的