Gmail邮件通过JavaMail发送(不带附件与带一个附件)

package cn.mail;

import java.security.Security;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
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;

/**
* 用于发送邮件
* @author
*
*/
public class SendMail {

    /**
     * 用于发送不带附件的邮件
     */
    public void send() {

        // 邮件服务器
        String smtpHost = "smtp.gmail.com";

        // 源邮箱地址
        String mFrom = "[email protected]";
        // 收件箱地址
        String mTo = "[email protected]";

        //验证用户名(@前部分)和密码
        final String mName = "xxxxx";
        final String mPwd = "yyyyy";

        // 邮件主题
        String subject = "mailTitle";

        // 邮件内容
        String mText = "textContent";

        // 目的邮箱列表取得

        // 邮件发送
        Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
        Properties props = new Properties();

        // 设置发送邮件的邮件服务器的属性
        props.put("mail.smtp.host", smtpHost);
        props.put("mail.smtp.auth", "true");
        props.put("mail.debug", "true");
        props.put("mail.smtp.port", "465");
        props.put("mail.smtp.socketFactory.port", "465");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.socketFactory.fallback", "false");

        // 用刚刚设置好的props对象构建一个session,用用户名和密码通过验证
        Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
                        protected PasswordAuthentication getPasswordAuthentication() {
                            return new PasswordAuthentication(mName, mPwd);
                      }
                   });

        // 供调试使用(你可以在控制台(console)上看到发送邮件的过程)
        session.setDebug(true);

        // 用session为参数定义消息对象
        Message message = new MimeMessage(session);
        try {

            // 加载发件人地址
            message.setFrom(new InternetAddress(mFrom));

            // 加载收件人地址
            message.setRecipient(Message.RecipientType.TO, new InternetAddress(mTo, false));

            // 加载标题
            message.setSubject(subject);

            // 加载内容
            message.setContent(mText, "text/plain");

            message.saveChanges();

            // 发送
            Transport.send(message);

        } catch (Exception e) {
            e.printStackTrace();

            // 邮件未发送成功
        }
    }

    /**
     * 用于发送带单个附件的邮件
     */
    public void sendFile() {

        // 邮件服务器
        String smtpHost = "smtp.gmail.com";

        // 源邮箱地址
        String mFrom = "[email protected]";
        // 收件箱地址
        String mTo = "[email protected]";

        //验证用户名(@前部分)和密码
        final String mName = "xxxxx";
        final String mPwd = "yyyyy";

        // 邮件主题
        String subject = "mailTitle";

        // 邮件内容
        String mText = "textContent";

        // 邮件发送
        Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
        Properties props = new Properties();

        // 设置发送邮件的邮件服务器的属性
        props.put("mail.smtp.host", smtpHost);
        props.put("mail.smtp.auth", "true");
        props.put("mail.debug", "true");
        props.put("mail.smtp.port", "465");
        props.put("mail.smtp.socketFactory.port", "465");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.socketFactory.fallback", "false");

        // 用刚刚设置好的props对象构建一个session,用用户名和密码通过验证
        Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
                        protected PasswordAuthentication getPasswordAuthentication() {
                            return new PasswordAuthentication(mName, mPwd);
                      }
                   });

        // 供调试使用(你可以在控制台(console)上看到发送邮件的过程)
        session.setDebug(true);

        // 用session为参数定义消息对象
        Message message = new MimeMessage(session);
        try {

            // 加载发件人地址
            message.setFrom(new InternetAddress(mFrom));

            // 加载收件人地址
            message.setRecipient(Message.RecipientType.TO, new InternetAddress(mTo, false));

            // 加载标题
            message.setSubject(subject);

            // 加载内容
            message.setContent(mText, "text/plain");

            //整个邮件对象
            Multipart mp = new MimeMultipart();

            //消息内容对象
            MimeBodyPart mbp = new MimeBodyPart();

            //消息内容对象中加入文本内容
            mbp.setContent(mText, "text/html;charset=gb2312");

            //整个邮件对象中加入消息内容对象(即文本内容部分)
            mp.addBodyPart(mbp);

            //得到数据源:直接给出文件的绝对路径
            FileDataSource fds = new FileDataSource("D:\\javamail\\aa.xls");

            //得到附件本身并放入BodyPart
            mbp.setDataHandler(new DataHandler(fds));

            //得到文件名同样放入BodyPart
            mbp.setFileName(fds.getName());

            //整个邮件对象中加入消息内容对象(即附件内容部分)
            mp.addBodyPart(mbp);

            //整个邮件对象加入到信件
            message.setContent(mp);

            message.saveChanges();

            // 发送
            Transport.send(message);

        } catch (Exception e) {
            e.printStackTrace();

            // 邮件未发送成功
        }
    }

     public static void main(String[] args) {
         SendMail ml = new SendMail();

         //发送不带附件的邮件
         ml.send();

         //发送带单个附件的邮件
         ml.sendFile();
         System.out.println("SEND SUCCESS!");
    }
}

你可能感兴趣的:(.net,Security,sun,Gmail)