天天看点

javamail发邮件全过程

javamail和OutLook都是第一次接触,因此遇到一些不小麻烦。所以写下来记录着以备以后不时之需。

下面是客户端的设置过程:

      以中文版 Outlook Express 6 为例,请按以下步骤,手动配置你的客户端:

  1、打开 Outlook Express 后,单击窗口中的“工具”菜单,选择“帐户”;

  2、点击“邮件”标签,点击右侧的“添加”按钮,在弹出的菜单中选择“邮件”;

  3、弹出的对话框中,根据提示,输入你的“显示名”, 然后点击“下一步”;

  4、输入你的电子邮件地址,点击“下一步”

  5、输入你邮箱的 POP 和 SMTP 服务器地址:

      pop: pop.126.com

      smtp: smtp.126.com

      再点击“下一步”;

  6、输入你的帐号及密码(此帐号为登录此邮箱时用的帐号,仅输入 @ 前面的部分),再点击“下一步”;

  7、单击“完成”按钮保存你的设置;

  8、设置 SMTP 服务器身份验证:在“邮件”标签中,双击刚才添加的帐号,弹出此帐号的属性框;

  9、请点击“服务器”标签,然后在“发送邮件服务器”处,选中“我的服务器要求身份验证”选项,并点击右边“设置”标签,选中“使用与接收邮件服务器相同的设置”。

  10、点击“确定”,然后“关闭”帐户框。

注意:现在网易的免费邮箱已经不提供POP3/SMTP功能了,因此我选择用QQ邮箱进行设置,但QQ邮箱的POP3/SMTP默认是关闭的,应该在邮箱里设置下,具体点设置->帐户里有。

开始我没有配置客户端就运行下面的程序出现了很多问题如下显示为验证出错,呵呵,那么客户端配置好之后现运行下面的程序就完全OK啦。

[color=red]454 Authentication failed

javax.mail.SendFailedException: Sending failed;

  nested exception is:

class javax.mail.AuthenticationFailedException

at javax.mail.Transport.send0(Transport.java:218)

at javax.mail.Transport.send(Transport.java:80)[/color]

下面是JAVAMAIL发邮件的主程序(注意发邮件是需要验证的)

public class MailUtil {

 static int port=25;

 static String server="smtp.qq.com";

 static String from="[email protected]";

 static String user="zxlcd520";

 static String password="*****";

 public static void sendEmail(String email,String subject,String body){

  try{

   Properties props=new Properties();   

   props.put("mail.smtp.host",server);

   props.put("mail.smtp.port",String.valueOf(port));

   props.put("mail.smtp.auth","true");//验证

   Transport transport=null;

   MyAuthenticator myauth = new MyAuthenticator(from, password);

   Session session=Session.getDefaultInstance(props,myauth);

   session.setDebug(true);

   transport=session.getTransport("smtp");

   transport.connect(server,user,password);

   MimeMessage msg=new MimeMessage(session);

   msg.setSentDate(new Date());

   InternetAddress fromAddress=new InternetAddress(from);

   msg.setFrom(fromAddress);

   InternetAddress[] toAddress=new InternetAddress[1];

   toAddress[0]=new InternetAddress(email);

   msg.setRecipients(Message.RecipientType.TO,toAddress);

   msg.setSubject(subject);

   msg.setText(body);

   msg.saveChanges();

   transport.sendMessage(msg,msg.getAllRecipients());//System.out.print("ok");

   //Transport.send(msg);

  }catch(NoSuchProviderException e){

   e.printStackTrace();

  }catch(MessagingException e){

   e.printStackTrace();

  }

 }

}

class MyAuthenticator extends javax.mail.Authenticator {

 private String strUser;

 private String strPwd;

 public MyAuthenticator(String user, String password) {

  this.strUser = user;

  this.strPwd = password;

 }

 protected PasswordAuthentication getPasswordAuthentication() {

  return new PasswordAuthentication(strUser, strPwd);

 }

}

补充:上面的程序完全正确了,我在单独的Main函数中测试过能发邮件,但是在web工程中却出现下面的异常java.lang.NoClassDefFoundError: javax/mail/MessagingException

工程中J2EE库由myeclipse自动提供,当然也包含了mail.jar啦但运行时却说找不到MessagingException类~显然是mail.jar和activation.jar两个包没有在classpath,tomcat运行的时候找不到相应的类咯~因此手动加到工程中就OK啦~

继续阅读