`
拖拖鞋
  • 浏览: 90781 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

使用javax.mail发送邮件

阅读更多
抽空找资料,做了一个发送邮件的demo,具体的说明都在注释里了。防止后面又忘了!
package sendEmail;

import java.util.Properties;

import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

/**  
 *   
 * SendEmail  
 * 类作用描述  
 * @author yangchuang  
 * @since 2014-9-20 下午6:36:18    
 * @version 1.0.0  
 * 修改记录
 * 修改日期    修改人    修改后版本    修改内容
 */
public class SendEmail {
    /**  
     * Session对象,Session定义了全局的和每个用户的与邮件相关的属性,这些属性详细说明了客户机和服务器如何交流信息。
     */  
    private Session session;
    
    /**  
     * Message表示单个邮件消息,其属性包括消息类型、地址信息和所定义的目录结构。但是Message类是一个抽象类,必须实现它的一个子类。
     * Message类的主要方法有两部分,第一部分主要在发送邮件的时候使用,用于设置邮件的相关信息,包括邮件的发送者、接收者、主题和发送时间等。
     * 通常使用MimeMessage,它是Message类的一个派生类。
     */  
    private Message message;
    
    /**  
     * 是一个抽象类,用于邮件的发送。
     */  
    private Transport transport;
    
    /**  
     * 发送邮件服务器的主机名(smtp.163.com)
     */  
    private String host;
    
    /**  
     * 发送邮件的用户名 (xxxx@163.com)
     */  
    private String userName;
    
    /**  
     * 与用户名对应的密码(xxxxxx)
     */  
    private String pwd;
    
      
    /**  
     * 创建一个新的实例 SendEmail.  
     *  
     * @param host      发送邮件服务器的主机名(smtp.163.com)
     * @param userName  发送邮件的用户名(xxxx@163.com)
     * @param pwd       与用户名对应的密码(xxxxxx)
     * @throws MessagingException  
     */
    public SendEmail(String host, String userName, String pwd) throws MessagingException {
        Properties proTemp = new Properties();
        // 设置发送邮件的邮件服务器的属性
        proTemp.put("mail.smtp.host", host);
        // 需要经过授权,也就是有户名和密码的校验,这样才能通过验证
        proTemp.put("mail.smtp.auth", "true");
        // 通过proTemp属性对象获取Session实例
        session = Session.getDefaultInstance(proTemp);
        // 通过session对象获取Message实例
        message = new MimeMessage(session);
        // 通过session对象获取Message实例
        transport = session.getTransport("smtp");
        this.host = host;
        this.userName = userName;
        this.pwd = pwd;
    }

    public void send(String from, String address, String subject, String txt) throws AddressException {
        this.send(from, new String[]{address}, subject, txt);
    }

    public void send(String from, String[] addressesStr, String subject, String txt) throws AddressException{
        Address[] addresses = new Address[addressesStr.length];
        for(int i = 0; i < addressesStr.length;i++){
            addresses[i] = new InternetAddress(addressesStr[i]);
        }
        this.send(new InternetAddress(from), addresses, subject, txt);
    }

    public void send(Address from, Address[] addresses, String subject, String txt) {
        try {
            message.setFrom(from);
            
            // 用于设置邮件的接收者。有两个参数,第一个参数是接收者的类型,第二个参数是接收者。
            // 接收者类型可以是Message.RecipientType.TO,Message.RecipientType.CC和Message.RecipientType.BCC。
            // TO表示主要接收人,CC表示抄送人,BCC表示秘密抄送人。接收者与发送者一样,通常使用InternetAddress的对象。
            message.addRecipients(Message.RecipientType.TO, addresses);
            message.setSubject(subject);
            // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
            Multipart multipart = new MimeMultipart();
            // 设置邮件的文本内容
            BodyPart contentPart = new MimeBodyPart();
            contentPart.setText(txt);
            multipart.addBodyPart(contentPart);
            message.setContent(multipart);
            message.saveChanges();
            // 链接
            transport.connect(host, userName, pwd);
            // 发送
            transport.sendMessage(message, message.getAllRecipients());
            // 关闭
            transport.close();
        }
        catch (AddressException e) {
            e.printStackTrace();
        }
        catch (MessagingException e) {
            e.printStackTrace();
        }
    }
    
    public void modifyUser(String userName, String pwd){
        this.userName = userName;
        this.pwd = pwd;
    }

    public Transport getTransport() {
        return transport;
    }

    public String getUserName() {
        return userName;
    }

    public String getPwd() {
        return pwd;
    }

}


测试代码
package sendEmail;

import javax.mail.MessagingException;

public class SendEmailTest {
    public static void main(String[] args) throws MessagingException {
        SendEmail sendEmail = new SendEmail("smtp.163.com", "XXXXXX@163.com", "xxxxxx");
        sendEmail.send("xxxxxx@163.com", new String[]{"xxxxxxxxx@qq.com","xxxxxxxxx@qq.com"}, "还没有收到了么!", "这才是测试邮件!");
        sendEmail.modifyUser("xxxxxxxxxx@163.com", "xxxxxxxxx");
        sendEmail.send("xxxxxxxxxx@163.com", new String[]{"xxxxxxxx@qq.com","xxxxxxxxxx@qq.com"}, "还没有收到了么!", "这才是测试邮件!");
    }
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics