首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

JMail发送邮件例证

2012-07-02 
JMail发送邮件例子发送文本邮件:http://zhaipuhong.iteye.com/blog/213005用JavaMail 发送电子邮件虽然很

JMail发送邮件例子
发送文本邮件:http://zhaipuhong.iteye.com/blog/213005
用JavaMail 发送电子邮件虽然很简单,但是对于未接触过的朋友,它还存在着一丝神秘。本文通过用一个简单的Java 应用程序发送一封电子邮件来揭开这片神秘的面纱,而对于邮件协议等等内容,这里暂不涉及---东西太多了就像云雾一样遮住了双眼。这方面以后还需要跟大家专门探讨一下。

       JavaMail API 是一个用于阅读、编写和发送电子消息的可选包(标准扩展),与Microsoft Outlook、FoxMail之类的软件功能相似。这也可以看出,API本身的用途并不是用来传输、发送和转发电子消息,这些都是邮件服务器的工作,JMail API 用来创建邮件用户代理(Mail User Agent)类型程序,邮件服务器我们以后再介绍。

       在开始介绍一下本示例的运行环境:
      ·Window 2000 Server sp4
    ·JDK 6u10b
    ·JMail API v1.4.2
    ·JAF API v1.1 (JavaBean Activation Framework) 这个是JMail API依赖的支持库
   ·Eclipse 3.4 for J2EE Developers


  
    用JavaMail发送电子邮件的过程比较简单,大致分为以下四个步骤:

    1. 创建Properties 对象,设置邮件服务器属性:mail.smtp.host ,其指定你的SMTP服务器,这个服务器不用担心,我们就用163现成的。

      2.  建立一个邮件会话,你可以创建若干个邮件会话,有兴趣可以研究研究

      3.  创建你的邮件信息对象,该对象包含了你的邮件的全部内容,包括发送人,接受人,标题,正文,附件等内容

    4. 邮件传输,邮件的传输只有送出和收到两中状态。JavaMail 将之称为传输和存储。这里我只展示发送邮件 

        用代码来描述如下所示:
Java代码 
String host = ...; // 指定的smtp服务器 
String from = ...; // 邮件发送人的邮件地址 
String to = ...; // 邮件接收人的邮件地址 
 
// 创建Properties 对象 
Properties props = System.getProperties(); 
 
// 添加smtp服务器属性 
props.put("mail.smtp.host", host); 
 
// 创建邮件会话 
Session session = Session.getDefaultInstance(props, null); 
 
try { 
    // 定义邮件信息 
    MimeMessage message = new MimeMessage(session); 
    message.setFrom(new InternetAddress(from)); 
    message.addRecipient(Message.RecipientType.TO, new InternetAddress( 
            to)); 
    message.setSubject("HelloWorld JavaMail"); 
    message.setText("Welcome to JavaMail World!"); 
 
    // 发送消息 
    Transport.send(message); 
 
} catch (MessagingException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 

 
       以上已经描述用JMail 发送邮件的大致过程,如果你有一个免费的不需要帐户认证的公用邮件服务器,上面的程序已经可以用来发送邮件了。(不过我没有找到这样的邮件服务器,不过可以自己配置一个^_^)


       眼见为实,不真正发送成功一个邮件,始终会让人觉得掉胃口。要想那样,我们需要稍微修改上面的程序,完整的程序如下:
Java代码 

package com.zhaipuhong.j2ee.jmail;    import java.util.Properties;    import javax.mail.Authenticator;  import javax.mail.Message;  import javax.mail.MessagingException;  import javax.mail.PasswordAuthentication;  import javax.mail.Session;  import javax.mail.Transport;  import javax.mail.internet.InternetAddress;  import javax.mail.internet.MimeMessage;    public class HelloJMail {               public static void sendMail() {      String host = "smtp.163.com"; // 指定的smtp服务器      String from = ""; // 邮件发送人的邮件地址      String to = ""; // 邮件接收人的邮件地址      final String username = "";  //发件人的邮件帐户      final String password = "";   //发件人的邮件密码        // 创建Properties 对象      Properties props = System.getProperties();        // 添加smtp服务器属性      props.put("mail.smtp.host", host);      props.put("mail.smtp.auth", "true");   //163的stmp不是免费的也不公用的,需要验证        // 创建邮件会话      Session session = Session.getDefaultInstance(props, new Authenticator(){  //验账账户          @Override          public PasswordAuthentication getPasswordAuthentication() {              return new PasswordAuthentication(username, password);          }                    });        try {              // 定义邮件信息           MimeMessage message = new MimeMessage(session);                         message.setFrom(new InternetAddress(from));             message.addRecipient(Message.RecipientType.TO, new InternetAddress(                      to));             message.setSubject("HelloWorld JavaMail");                         message.setText("Welcome to JavaMail World!");               // 发送消息           //session.getTransport("smtp").send(message);  //也可以这样创建Transport对象           Transport.send(message);        } catch (MessagingException e) {          e.printStackTrace();      }        }          public static void main(String[] args) {      HelloJMail.sendMail();        }    }  

     上面的程序把我的邮箱帐号信息删除了,测试的时候补充你自己的邮箱帐号信息即可使用:
Java代码 
…… 
public static void sendMail() { 
       String host = "smtp.163.com"; // 指定的smtp服务器 
   String from = ""; // 邮件发送人的邮件地址 
   String to = ""; // 邮件接收人的邮件地址 
   final String username = "";  //发件人的邮件帐户 
   final String password = "";   //发件人的邮件密码 


      FAQ:
     1. 如果你遇到“……553 authentication is required……”
      请检查你的如下设置是否正确:
   
Java代码 
…… 
 
props.put("mail.smtp.auth", "true"); 
 
…… 
Session session = Session.getDefaultInstance(props, new Authenticator(){//你也可以单独创建Authenticator对象 
            @Override 
            public PasswordAuthentication getPasswordAuthentication() { 
                return new PasswordAuthentication(username, password); 
            } 
             
}); 
 
…… 
      2. 如果你遇到“……java.lang.NoClassDefFoundError……com/sun/mail/util/SharedByteArrayInputS 、   com/sun/mail/util/MailDateFormat……  ” 之类的错误
      可能你的项目中引用了j2ee.jar包,里面包含有jmail API,与你添加到classpath中的jmail.jar版本不一样或者内容有差别等造成,你需要在classpath中把你刚添加的jmail.jar和activation.jar放在j2ee.jar的前面,在IDE中,就在类库中把这两个包“move up”到j2ee.jar包的上面。




发送附件例子:http://blog.csdn.net/lijun0349/article/details/4536126
package com;import java.util.Properties;import javax.mail.*;import javax.mail.internet.*;import javax.activation.*;public class a { public static void main(String[] agrs) {  String host = "smtp.att.yahoo.com"; // SMTP服务器名  String name = "asl@fdsgf.net"; // 邮箱登录名  String passWord = "hghhhdss"; // 邮箱密码  String from = "from@163.com";  String to = "to@live.cn";  String subject = "Hello JavaMail Attachment";  String body = "Hi, this is body";  String fileAttachment = "F://1.gif";  Properties props = System.getProperties();  try {   props.put("mail.smtp.host", host);   // props.put("mail.smtp.port", 465);   props.put("mail.smtp.auth", "true");   //SmtpAuth sa = new SmtpAuth(name, passWord);      Session session = Session.getInstance(props, null);   MimeMessage message = new MimeMessage(session);   message.setFrom(new InternetAddress(from));   message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));   message.setSubject(subject);   MimeBodyPart messageBodyPart = new MimeBodyPart();   messageBodyPart.setText(body);   Multipart multipart = new MimeMultipart();   multipart.addBodyPart(messageBodyPart);   messageBodyPart = new MimeBodyPart();   DataSource source = new FileDataSource(fileAttachment);   messageBodyPart.setDataHandler(new DataHandler(source));   messageBodyPart.setFileName(fileAttachment);   multipart.addBodyPart(messageBodyPart);   message.setContent(multipart);   Transport transport = session.getTransport("smtp");   transport.connect(host, name, passWord);   transport.sendMessage(message, message.getAllRecipients());   transport.close();  } catch (Exception e) {   e.printStackTrace();  } }}

热点排行