Java发邮件(email.jar)的方法

欢迎进入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]

接着我们去了遇龙河,那里的水清澈见底,我把脚伸进水里,

Java发邮件(email.jar)的方法

相关文章:

你感兴趣的文章:

标签云: