用javaMail API实现邮件发送

使用javaMial API 实现邮件发送大体需要三个类组合完成:设置邮件的类,身份验证类和邮件发送类。

设置邮件的类主要是设置邮件的Property.比如,发送服务器地址,接收服务器地址,模拟登陆登陆邮件发送服务器时必须知道的登录名和密码,是否需要身份验证等一些属性信息。

当用代码模拟客户端登陆邮箱并试图发送邮件的时候,有些邮箱需要身份验证,否则的话会报553 authentication is required,smtp*的错误。

邮件发送类主要用来建立邮件会话javax.mail.Session,设置邮件内容等javax.mail.Message,javax.mail.Address代表邮件地址,javax.mail.Transport类根据指定的邮件发送协议,通过指定的邮件发送服务器来发送邮件。

邮件的形式可以分成纯文本、HTML、或者是再带上附件。

设置邮件类:

import java.util.Properties;

/**

 * 设置邮件

 * @author user

 *

 */

public class MailSenderInfo {  

   // 发送邮件的服务器的IP和端口  

   private String mailServerHost;  

   private String mailServerPort = "25";  

   // 邮件发送者的地址  

   private String fromAddress;  

   // 邮件接收者的地址  

   private String toAddress;  

   // 登陆邮件发送服务器的用户名和密码  

   private String userName;  

   private String password;  

   // 是否需要身份验证  

   private boolean validate = false;  

   // 邮件主题  

   private String subject;  

   // 邮件的文本内容  

   private String content;  

   // 邮件附件的文件名  

   private String[] attachFileNames;  

 

   /** 

    * 获得邮件会话属性 

    */  

   public Properties getProperties() {  

       Properties p = new Properties();  

       p.put("mail.smtp.host", this.mailServerHost);  

       p.put("mail.smtp.port", this.mailServerPort);  

       p.put("mail.smtp.auth", validate ? "true" : "false");  

       return p;  

   }  

//get() set()方法省略

}

身份验证类:

import javax.mail.Authenticator;

import javax.mail.PasswordAuthentication;

/**

 *身份验证

 * @author user

 *

 */

public class MyAuthenticator extends Authenticator {  

    

    String userName = null;  

    String password = null;  

  

    public MyAuthenticator() {  

    }  

  

    public MyAuthenticator(String username, String password) {  

        this.userName = username;  

        this.password = password;  

    }  

  

    protected PasswordAuthentication getPasswordAuthentication() {  

        return new PasswordAuthentication(userName, password);  

    }  

}  

发送邮件类:

import java.util.Date;

import java.util.Properties;

 

import javax.activation.DataHandler;

import javax.activation.FileDataSource;

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.InternetAddress;

import javax.mail.internet.MimeBodyPart;

import javax.mail.internet.MimeMessage;

import javax.mail.internet.MimeMultipart;

 

public class SimpleMailSender {  

    /** 

     * 以文本格式发送邮件 

     *  

     * @param mailInfo 

     *            待发送的邮件的信息 

     */  

    public boolean sendTextMail(MailSenderInfo mailInfo) {  

        // 判断是否需要身份认证  

        MyAuthenticator authenticator = null;  

        Properties pro = mailInfo.getProperties();  

        if (mailInfo.isValidate()) {  

            // 如果需要身份认证,则创建一个密码验证器  

            authenticator = new MyAuthenticator(mailInfo.getUserName(),  

                    mailInfo.getPassword());  

        }  

        // 根据邮件会话属性和密码验证器构造一个发送邮件的session  

        Session sendMailSession = Session  

                .getDefaultInstance(pro, authenticator);  

        try {  

            // 根据session创建一个邮件消息  

            Message mailMessage = new MimeMessage(sendMailSession);  

            // 创建邮件发送者地址  

            Address from = new InternetAddress(mailInfo.getFromAddress());  

            // 设置邮件消息的发送者  

            mailMessage.setFrom(from);  

            // 创建邮件的接收者地址,并设置到邮件消息中  

            Address to = new InternetAddress(mailInfo.getToAddress());  

            mailMessage.setRecipient(Message.RecipientType.TO, to);  

            // 设置邮件消息的主题  

            mailMessage.setSubject(mailInfo.getSubject());  

            // 设置邮件消息发送的时间  

            mailMessage.setSentDate(new Date());  

            // 设置邮件消息的主要内容  

            String mailContent = mailInfo.getContent();  

            mailMessage.setText(mailContent);  

            // 发送邮件  

            Transport.send(mailMessage);  

            return true;  

        } catch (MessagingException ex) {  

            ex.printStackTrace();  

        }  

        return false;  

    }  

  

    /** 

     * 以HTML格式发送邮件 

     *  

     * @param mailInfo 

     *            待发送的邮件信息 

     */  

    public boolean sendHtmlMail(MailSenderInfo mailInfo) {  

        // 判断是否需要身份认证  

        MyAuthenticator authenticator = null;  

        Properties pro = mailInfo.getProperties();  

        // 如果需要身份认证,则创建一个密码验证器  

        if (mailInfo.isValidate()) {  

            authenticator = new MyAuthenticator(mailInfo.getUserName(),  

                    mailInfo.getPassword());  

        }  

        // 根据邮件会话属性和密码验证器构造一个发送邮件的session  

        Session sendMailSession = Session  

                .getDefaultInstance(pro, authenticator);  

        try {  

            // 根据session创建一个邮件消息  

            Message mailMessage = new MimeMessage(sendMailSession);  

            // 创建邮件发送者地址  

            Address from = new InternetAddress(mailInfo.getFromAddress());  

            // 设置邮件消息的发送者  

            mailMessage.setFrom(from);  

            // 创建邮件的接收者地址,并设置到邮件消息中  

            Address to = new InternetAddress(mailInfo.getToAddress());  

            // Message.RecipientType.TO属性表示接收者的类型为TO  

            mailMessage.setRecipient(Message.RecipientType.TO, to);  

            // 设置邮件消息的主题  

            mailMessage.setSubject(mailInfo.getSubject());  

            // 设置邮件消息发送的时间  

            mailMessage.setSentDate(new Date());  

              

            // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象  

            Multipart mainPart = new MimeMultipart();  

            // 创建一个包含HTML内容的MimeBodyPart  

            BodyPart html = new MimeBodyPart();  

            // 设置HTML内容  

            html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");  

            mainPart.addBodyPart(html);  

              

            //设置信件的附件(用本地上的文件作为附件)  

            html = new MimeBodyPart();  

            FileDataSource fds = new FileDataSource("D:\\javamail.doc");  

            DataHandler dh = new DataHandler(fds);  

            html.setFileName("javamail.doc");  

            html.setDataHandler(dh);  

            mainPart.addBodyPart(html);  

              

            // 将MiniMultipart对象设置为邮件内容  

            mailMessage.setContent(mainPart);  

            mailMessage.saveChanges();  

              

            // 发送邮件  

            Transport.send(mailMessage);  

            return true;  

        } catch (MessagingException ex) {  

            ex.printStackTrace();  

        }  

        return false;  

    }  

}  

测试类:

public class SendMail {  

    

    public static void main(String[] args) {  

        SendMail.send_163();  

    }  

      

    // 163邮箱  

    public static void send_163() {  

        // 这个类主要是设置邮件  

        MailSenderInfo mailInfo = new MailSenderInfo();  

        mailInfo.setMailServerHost("smtp.163.com");  

        mailInfo.setMailServerPort("25");  

        mailInfo.setValidate(true);  

        mailInfo.setUserName("***@163.com"); // 实际发送者  

        mailInfo.setPassword("***");// 您的邮箱密码  

        mailInfo.setFromAddress("***@163.com"); // 设置发送人邮箱地址  

        mailInfo.setToAddress("***@163.com"); // 设置接受者邮箱地址  

        mailInfo.setSubject("hello");  

        mailInfo.setContent("morning");  

        // 这个类主要来发送邮件  

        SimpleMailSender sms = new SimpleMailSender();  

        sms.sendTextMail(mailInfo); // 发送文体格式  

        sms.sendHtmlMail(mailInfo); // 发送html格式  

    }  

}  

 

转载于:https://my.oschina.net/u/2482228/blog/525628

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值