Java Mail 发送邮件(个人备份)

package net.guoguoda.admin.common.utils;

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
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;
import javax.mail.internet.MimeUtility;

public class SendMail {
    /*
    * POP3/SMTP协议
    * 收发邮件服务器地址分别如下。
    * 接收邮件服务器:pop.exmail.qq.com (端口 110)
    * 发送邮件服务器:smtp.exmail.qq.com (端口 25)
    * 同时支持SSL加密方式登录,此时需要更改一下端口号。
    * 接收服务器端口:995
    * 发送服务器端口:465
    * IMAP协议
    * 接收邮件服务器:imap.exmail.qq.com
    * 如果使用SSL加密方式,接收服务器端口是: 993
    */
    private final static String HOST = "smtp.exmail.qq.com";
    private final static String SENDTYPE = "smtp";
    public static void sendTxtMail(String from,String password,String to,File file){

        /*
         * SMTP 的全称是“Simple Mail Transfer Protocol
         * 即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。
         * SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。
         * SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。
         * SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。
         * 增加 SMTP认证的目的是为了使用户避免受到垃圾邮件的侵扰
         */
        /*
         * IMAP全称是Internet Mail Access Protocol,
         * 即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。
         * 不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,
         * 如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。
         * 所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的。
         */
        //设置邮件参数
        Properties props = new Properties();
        props.setProperty("mail.transport.protocol", SENDTYPE);//邮件传输协议方式
        props.put("mail.smtp.host", HOST);//腾讯smtp服务器地址
        props.put("mail.smtp.auth", true);//是否需要smtp验证
        /*
         * 此处需要集成Authenticator类,重写getPasswordAuthentication方法
         */
        MailAuthenticator myauth = new MailAuthenticator(from,password);//验证账户和密码
        Session session = Session.getInstance(props,myauth);
        session.setDebug(true);//打开debug模式,会打印发送细节到console
        /*
         * message是邮件的载体,一封完整的邮件包括:
         * 发件人,接收人,发送方式(TO - 收件人;CC - 抄送人;BCC - 暗送人),标题(subject),内容(content)
         *
         */
        Message message =new MimeMessage(session);
        try{
            //设置邮件标题
            message.setSubject("配送表发送");
            //设置邮件发送人
            message.setFrom(new InternetAddress(from));
            //设置邮件收件人
            InternetAddress target = new InternetAddress(to);
            message.setRecipient(Message.RecipientType.TO,target);
            /*
             * Message表示一个邮件,messgaes.getContent()返回一个Multipart对象
             * 一个Multipart对象包含一个或多个BodyPart对象,来组成邮件的正文部分(包括附件)
             * Multipart是一个容器它转载多个body Part(正文、附件或内嵌资源)
             */
            Multipart multipart = new MimeMultipart();
            BodyPart bodyPart = new MimeBodyPart();
            bodyPart.setContent("","text/html;charset=utf8");
            multipart.addBodyPart(bodyPart);
            /*
             * 添加附件
             */
            bodyPart = new MimeBodyPart();
            DataSource dataSource = new FileDataSource(file.getAbsolutePath());
            DataHandler dataHandler = new DataHandler(dataSource);
            bodyPart.setDataHandler(dataHandler);
            /*
             * 邮件头(参见RFC822,RFC2047)只能包含US-ASCII字符。邮件头中任何包含非US-ASCII字符的部分必须进行编码,使其只包含US-ASCII字符。
             * 所以使用java mail发送中文邮件必须经过编码,否则别人收到你的邮件只能是乱码一堆。
             * 不过使用java mail 包的解决方法很简单,用它自带的MimeUtility工具中encode开头的方法(如encodeText)对中文信息进行编码就可以了。
             * 通常对邮件头的编码方式有2种,一种是base64方式编码,一种是QP(quoted-printable)方式编码,javamail根据具体情况来选择编码方式。
             */
            String name =  MimeUtility.encodeText(file.getName(),"gb2312","B");
            bodyPart.setFileName(name);
            multipart.addBodyPart(bodyPart);

            message.setContent(multipart);
            //方式一
//            Transport transport = session.getTransport(SENDTYPE);
//            transport.connect("smtp.exmail.qq.com",25,from, password);
//            transport.sendMessage(message, message.getAllRecipients());
//            transport.close();
            //方式二
            Transport.send(message);
        }catch(MessagingException  e){
            System.out.println(e.getMessage());
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }
    public static void sendTxtMail(String from,String password,String to)
    {
       Properties props = new Properties();
       props.put("mail.smtp.host", HOST); //smtp服务器地址
       props.setProperty("mail.transport.protocol", "smtp");
       props.put("mail.smtp.auth", false);  //是否需要认证  

       /**实例化一个验证里,继承abstract Authenticator
        * 实现
        *   protected PasswordAuthentication getPasswordAuthentication(){
        *       return new PasswordAuthentication(userName,password);
        *   }
        */
//       MailAuthenticator myauth = new MailAuthenticator("[email protected]","zaq12wsx~");
       //获得一个带有authenticator的session实例
       Session session = Session.getInstance(props);
       session.setDebug(true);//打开debug模式,会打印发送细节到console
       Message message = new MimeMessage(session); //实例化一个MimeMessage集成自abstract Message 。参数为session
       try
       {
       message.setFrom(new InternetAddress(from)); //设置发出方,使用setXXX设置单用户,使用addXXX添加InternetAddress[]  

       message.setText("只是一个简简单单的文本内容哟!"); //设置文本内容 单一文本使用setText,Multipart复杂对象使用setContent
       message.setSubject("只是简简单单的文本标题哟!"); //设置标题
       message.setRecipient(Message.RecipientType.TO, new InternetAddress(to)); //设置接收方
       Transport transport = session.getTransport(SENDTYPE);
       transport.connect(HOST,25,from, password);
       transport.sendMessage(message, message.getAllRecipients());
       transport.close();

       }catch(AddressException e)
       {
           //此处处理AddressException异常  [The exception thrown when a wrongly formatted address is encountered.]
           System.out.println(e.getMessage());
       }catch(MessagingException e){
           System.out.println(e.getMessage());
           //此处处理MessagingException异常 [The base class for all exceptions thrown by the Messaging classes ]
       }catch(RuntimeException e){
           System.out.println(e.getMessage());
       }  

    }
    public static void main(String[] args){
        File file = new File("文件路径");
        SendMail.sendTxtMail("发件人邮箱","发件人邮箱密码","收件人邮箱",file);
    }
}

参考博客:http://magician8421.iteye.com/blog/702017

时间: 2024-08-01 04:07:41

Java Mail 发送邮件(个人备份)的相关文章

java mail发送邮件

import java.io.UnsupportedEncodingException;import java.util.Date;import java.util.Properties; import javax.mail.Authenticator;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.NoSuchProviderException;import javax.mail.

java mail发送邮件demo 代码

java mail发送邮件demo,引入mail.jar,运行测试发送ok[代码][Java]代码     01import java.util.Date;02import java.util.Properties;0304import javax.mail.Authenticator;05import javax.mail.Message;06import javax.mail.MessagingException;07import javax.mail.PasswordAuthenticat

Java mail发送邮件附件出现.eml文件夹

在使用JAVA MAIL发送邮件时,163邮箱和QQ邮箱收到PDF附件,格式错误如下图: 163邮箱: QQ邮箱: 经历了很长时间的研究和测试,错误原因为在邮件正文和邮件附件用的MimeBodyPart对象是同一个,进而导致上述现象,解决办法为正文是一个MimeBodyPart对象,一个附件是一个MimeBodyPart对象.正确代码如下: 原文地址:https://www.cnblogs.com/XH09/p/10981329.html

使用Java Mail发送邮件

本笔记参考自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/17839983 JavaMail是SUN提供给开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发类库,支持常用的邮件协议,如SMTP.POP3.IMAP,开发人员使用JavaMail编写邮件程序时,无需考虑底层的通信细节(Socket),JavaMail也提供了能够创建出各种复杂MIME格式的邮件内容的API.使用JavaMail,我们可以实现类似OutL

利用java mail发送邮件(转)

JavaMail是SUN提供给开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发类库,支持常用的邮件协议,如SMTP.POP3.IMAP,开发人员使用JavaMail编写邮件程序时,无需考虑底层的通信细节(Socket),JavaMail也提供了能够创建出各种复杂MIME格式的邮件内容的API.使用JavaMail,我们可以实现类似OutLook.FoxMail的软件.虽然JavaMail(仅支持JDK4及以上)也是Java的API之一,但是却没有直接加入到JDK中,所以我们需要另行

简单的java mail发送邮件实例

mail.jar ,commons-email-X.X.jar ,activation.jar ,log4j.jar  这四个jar,放进项目里 下载地址 http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-eeplat-419426.html 该类实现了较完整的邮件发送功能,包括以HTML格式发送,添加附件和抄送人.下面是具体的代码: 先写个简单的mail对象 packag

Java Mail 发送邮件

通过SMTP协议, 编写客户端向邮件服务器提交发送邮件请求 package mail import javax.mail.internet.MimeMessage import java.util.Properties import javax.mail.Session import javax.mail.Message import javax.mail.Transport import java.util.Date import javax.mail.MessagingException f

使用java mail 发送邮件

1.关联jar包:   activation.jar   mail.jar 2.调用 @Test public void test1() { List<String> imageUrlList = Arrays.asList(new String[] { "src/美女1.jpg", "src/2.jpg", "src/2.jpg" }); List<String> attachmentUrlList = Arrays.a

Android Java Mail与Apache Mail发送邮件对比

原文链接: 一.邮件简介  一封邮件由很多信息构成,主要的信息如下,其他的暂时不考虑,例如抄送等:  1.收件人:收件人的邮箱地址,例如[email protected]  2.收件人姓名:大部分的邮件显示时都会显示,例如loadfate [email protected]  3.发件人:发件人的邮箱地址  4.发件人姓名:  5.主题:邮件的标题  6.内容及附件:邮件的主要内容 二.使用Java发邮件的通用步骤  一般的项目中没有单独的邮件服务器,一般情况下都是使用别人的服务器.  1.设置