欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入
import java.util.Date;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.SendFailedException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class Mail {
private String host = “smtp.126.com”;
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 = “254173774@qq.com”;
private String mail_from = “hackboyo@126.com”;
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();//进行邮件服务用户认证
props.put(“mail.smtp.host”, host);
props.put(“mail.smtp.auth”, “true”);
System.out.println(props);
Session session = Session.getDefaultInstance(props,auth);
//设置session,和邮件服务器进行通讯
MimeMessage message = new MimeMessage(session);
message.setContent(“Hello”,”text/plain”);//设置邮件格式
message.setSubject(mail_subject);//设置邮件主题
message.setText(mail_body);//设置邮件内容
message.setHeader(mail_head_name, mail_head_value);//设置邮件标题
message.setSentDate(new Date());//设置邮件发送时期
Address address = new InternetAddress(mail_from,personalName);
message.setFrom(address);//设置邮件发送者的地址
Address toaddress = new InternetAddress(mail_to);//设置邮件接收者的地址
message.addRecipient(Message.RecipientType.TO,toaddress);
System.out.println(message);
Transport.send(message);
System.out.println(“Send Mail Ok!”);
} catch (Exception e) {
e.printStackTrace();
}
//return flag;
}
}
public Email_Autherticator(String user,String pwd){
super();
username = user;
password = pwd;
}
public PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(username,password);
}
}
====================其中遇到的问题以及解决方案=========================
1.发邮件收不到的问题
其中如果发送失败,一般是因为你的密码,用户名或者是smtp设置错误
smtp:QQ的是smtp.qq.com 163的是smtp.163.com gmail的是smtp.gmail.com
我觉得一般的邮箱应该都是 smtp.邮箱.com
2.props.put(“mail.smtp.auth”, “true”); //允许smtp校验
以前的邮箱这个可以设成false但是现在的一般都不行的,都需要smtp校验
3.另外你有时用别的邮箱做代理会发现报错说使用 pop3的错误,因为现在很多邮箱的 pop3 协议默认是关闭的
如果pop3 协议关闭就不能用其做代理,我试着注册过163,gmail,雅虎,qq的邮箱,都是注册后几周后才开通,
而且qq的邮箱是邮箱开通后两周才能手懂开通pop3 协议,在个人设置里有
4.关于乱码的问题,特别是移植的问题,这个问题困惑了我好几天
但最后还是找到了决绝方案
在winxp下
只要你的title和comtent在后台发送前有转码基本就没有问题的,我的项目页面是用utf-8,在后台我又做了一下
转码,发送时基本是没又乱码的
在Linux下,
我用的是在Linux下用的weblogic,在winxp下测试没问题的,但在Linux下会遇到很变态的乱码,大概是因为字符编码和传输编码(Content-Transfer-Encoding)的问题,最后看到一篇文章(http://www.javaresearch.org/html/article/64874.htm)才解决:解决方案
邮件的标题乱码解决: //设置mail主题
String mail_subject=Title;
sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
newMessage.setSubject(“=?GB2312?B?”+enc.encode(mail_subject.getBytes())+”?=”);
如果是在winxp上只需要newMessage.setSubject(mail_subject);就可以了,
邮件的正文这样是不行的,解决方案是:String mail_text=Content;
newMessage.setContent(mail_text,”text/plain;charset=gb2312 “);
而在winxp上只需要newMessage.setText(mail_text);就可以了
剩下的就没有什么问题了,其余的都是很简单的问题,有时还会遇到,你发的邮件有的邮箱可以收到
可是有的邮箱收不到,我们公司的邮件服务器就是这样的,qq邮箱是收不到的,但问题我们还不知道
最后没办法,我就只有用qq邮箱代理了,但是用别的邮箱代理还是有问题的,因为我用循环测试时发现
如果qq邮箱用10去循环只有前几条可以发出去,连续几封后就会有错,估计是qq邮箱的服务器发现异常暂时会把你的邮箱关闭,但一会儿就正常了,如果是126的邮箱,我测试时用的100,但到快五十封邮件时就不行了,原因估计是一样的。
[1][2]
接着我们去了遇龙河,那里的水清澈见底,我把脚伸进水里,