[原创]JavaMail实现邮件发送_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3055 | 回复: 0   主题: [原创]JavaMail实现邮件发送        下一篇 
xiuwen.zhao
高级会员
等级:上尉
经验:668
发帖:38
精华:0
注册:1970-1-1
状态:离线
发送短消息息给xiuwen.zhao 加好友    发送短消息息给xiuwen.zhao 发消息
发表于: IP:您无权察看 2014-8-26 17:57:19 | [全部帖] [楼主帖] 楼主

1.JavaMail介绍

JavaMail API用于连接E-mail系统,程序员可以通过JavaMail实现电子邮件的收取、发送。JavaMail可以支持POP3、IMAP4和SMTP等主要的电子邮件协议。JavaMail API与具体的邮件服务器供应商无关,而是提供了一种开放的、简单的E-mail开发环境。

开发JavaMail程序前需要将JavaMail的开发包加入到项目的类加载路径下,如果jdk的版本低于jdk6的话,还需添加JAF。

2.JavaMail实现邮件发送

下面通过一个邮件发送的案例来介绍一下JavaMail API的开发步骤。

① 创建邮件Session实例。Session类代表JavaMail中的一次邮件会话。每个基于JavaMail的应用程序至少会产生一次会话,也可以产生多次会话。发送邮件之前,通常应该建立邮件会话。

② 以Session实例为参数创建MimeMessage对象。MimeMessage对象是实际的电子邮件对象,创建该对象时应该传入一个邮件会话参数。

③ 为MimeMessage对象设置合适的属性和内容。MimeMessage类提供一系列的setter和getter方法,可以用来返回和设置MimeMessage对象的属性和内容。

④ 使用抽象类Transport的send或sendMessage方法发送邮件。调用send方法时,只要将MimeMessage对象传入,即可完成邮件的发送。sendMessage可以将邮件发送到多个地址。

下面是一个完整的邮件发送程序,运行时请将相关的账号密码换成自己的。

import java.util.*;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
public class SendAnEmail {
      private String to;// 收件人邮箱地址
      private String from;// 发件人邮箱地址
      private String smtpServer;// SMTP服务器地址
      private String username;// 登陆SMTP服务器的用户名
      private String password;// 登陆SMTP服务器的秘密
      private String subject;// 邮件主题
      private String content;// 邮件内容
      List<String> attachments = new ArrayList<String>();// 邮件附件
      public void setTo(String to) {
            this.to = to;
      }
      public void setFrom(String from) {
            this.from = from;
      }
      public void setSmtpServer(String smtpServer) {
            this.smtpServer = smtpServer;
      }
      public void setUsername(String username) {
            this.username = username;
      }
      public void setPassword(String password) {
            this.password = password;
      }
      public void setSubject(String subject) {
            this.subject = subject;
      }
      public void setContent(String content) {
            this.content = content;
      }
      public void attachfile(String filename) {
            attachments.add(filename);
      }
      public boolean send() {
            // 创建Session所需的Properties对象
            Properties props = new Properties();
            props.put("mail.smtp.host", smtpServer);
            props.put("mail.smtp.auth", "true");
            // 创建Session对象
            Session session = Session.getDefaultInstance(props,
            //登陆服务器的认证对象。
            new Authenticator() {
                  public PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(username, password);
                  }
            });
            try {
                  // 实例化MimeMessage并设置相关属性
                  MimeMessage msg = new MimeMessage(session);
                  //设置发件人
                  msg.setFrom(new InternetAddress(from));
                  //设置收件人
            InternetAddress[] addresses = { new InternetAddress(to) };
                  msg.setRecipients(Message.RecipientType.TO, addresses);
                  //设置邮件主题
                  msg.setSubject(subject);
                  //通过Multipart创建邮件内容的容器对象
                  Multipart mp = new MimeMultipart();
                  MimeBodyPart mbpContent = new MimeBodyPart();
                  mbpContent.setText(content);
                  //向Multipart添加正文
                  mp.addBodyPart(mbpContent);
                  //遍历附件列表,将所有附件添加到邮件消息里。
                  for (String efile : attachments) {
                        MimeBodyPart mbpFile = new MimeBodyPart();
                        FileDataSource fds = new FileDataSource(efile);
                        mbpFile.setDataHandler(new DataHandler(fds));
                        mbpFile.setFileName(fds.getName());
                        //向Multipart添加附件
                        mp.addBodyPart(mbpFile);
                  }
                  attachments.clear();
                  msg.setContent(mp);
                  msg.setSentDate(new Date());
                  //发送邮件
                  Transport.send(msg);
            } catch (MessagingException e) {
                  e.printStackTrace();
                  return false;
            }
            return true;
      }
      public static void main(String[] argss) {
            SendAnEmail mail = new SendAnEmail();
            mail.setTo("*****@qq.com");
            mail.setFrom("*****@126.com");
            mail.setSmtpServer("smtp.126.com");
            mail.setPassword("********");
            mail.setSubject("This is an subject of a mail");
            mail.setContent("This is the content of my mail");
            mail.setUsername("*****@126.com");
            mail.attachfile("src/SendAnEmail.java");
            if (mail.send()) {
                  System.out.println("Send an Email successfully!");
            }
      }
}


运行的结果如下:

北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论