JavaMail的发送

来源:互联网 发布:怎样做淘宝代销 编辑:程序博客网 时间:2024/04/29 04:14

JavaMail的发送

--尚晓鹏

一、邮件发送API的体系结构

    1、从Session对象中或地实现了某种邮件发送协议的Transport对象。

    2、使用Session对象创建Message对象,并调用Message对象的方法封装邮件数据。

    3、连接指定的SMTP服务器,并调用Transport对象中的器的主机名、端口号、采用的邮件发送和接受协议等。Session对象根据这些信息构建用于邮件收发的TransportStore对象,以及为客户端创建Message对象时提供信息支持。下面是一些常用的方法。

    getInstancegetDefaultInstance方法:

    静态方法,都可用于获得Session类的实例对象。由于Session类的构造函数是私有的,所以应用程序必须调用getInstance方法或getDefaultInstance方法获得Session类的实例对象。

Transport类:javax.mail.Transport 类继承了javax.mail.Server类,用于连接SMTP服务器,并把包含在Message对象中的邮件数据发送的SMTP服务器。

    Connect方法:用于建立与邮件服务器之间的连接。

    Public void connect();

    Public void connect(String host,String user,String password)

    Public void connect(String host,int port,String user,String password)

    sendMessage方法:向指定的邮件地址发送邮件。格式如下:

    public abstract void sendMessage(Message msg,Address[] address)

    这是一个非静态方法,必须得到Transport实例对象后才能被调用,sendMessage方法在发送邮件前不会调用自动调用Message.saveChanges()方法,JavaMail程序必须在调用这个方法前,潜泳代表被发送邮件的Message对象的saveChanges()方法。

    Close方法:用于断开与服务器之间的连接。格式如下:

    Public void close();

    Send方法:提供了一种发送邮件的简便方式,它是Transport类中的静态方法。格式如下:

    Public static void send(Message msg)

    Public static void send(Message msg,Address [] address)

    应用程序可以直接调用Transport.send 方法发送邮件。Send方法执行邮件发送任务时,他首先从参数Message对象中获得Session对象(创建MimeMessage对象时要伟器构造方法传入一个Session对象),然后调用Session.getTransport方法获得用于发送邮件的Transport实例对象,接着再使用保存在Session对象中的与网络连接相关的JavaMail属性,调用Transport对象的sendMessage方法发送邮件,最后调用close方法,断开与服务器的连接。可见,send方法内部一次调用了getTransport,connect,sendMessageclose方法,它可用作发送邮件的一种简单方法。

    好了,我们简单的介绍了一些方法,那么我们再来看一个邮件发送程序的实例。

首先,我们要了解使用JavaMail API发送程序要执行如下三个步骤:

    1、创建包含邮件服务器的网络连接信息的Session对象。

    2、创建代表邮件内容Message对象。

    3、从Session对象中获得Transport对象,并调用它的方法发送Message对象。

三、案例

   SendMail.java代码清单如下:

    package cn.csdn.sendmail;

 

import java.util.Properties;

 

import javax.activation.DataHandler

 

import javax.activation.FileDataSource;

 

import javax.mail.Message;

 

import javax.mail.MessagingException;

 

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;

 

public class SendMail {

 

    public static void main(String[] args) throws MessagingException {

 

       Properties props = new Properties();

 

       props.setProperty("mail.host", "smtp.163.com");

 

       props.setProperty("mail.transport.protocol", "smtp");

 

       props.setProperty("mail.smtp.auth", "true");

 

       Session session = Session.getDefaultInstance(props);

 

       Message msg = createMessage(session);

 

       Transport tt = session.getTransport();

 

       System.out.println("正在连接中....");

 

       tt.connect("dyzh.yysg", "system797836");

 

              System.out.println("连接完毕!");

 

       System.out.println("正在发送中....");

 

       tt.sendMessage(msg, msg.getAllRecipients());

 

       System.out.println("发送完毕!");

 

       System.out.println("正在关闭....");

 

       tt.close();

 

       System.out.println("完成!");

 

 

    }

    public static Message createMessage(Session session) {

 

       MimeMessage message = new MimeMessage(session);

 

       try {

           message.setFrom(new InternetAddress(dyzh.yysg@163.com));

 

           message.setRecipient(Message.RecipientType.TO, new InternetAddress(

 

                  605880319@qq.com));

 

           message.setSubject("来自JavaMail开发者!");

 

           MimeBodyPart text = new MimeBodyPart();

 

           text

                  .setContent(

                         "尊敬的用户,您好!我们正在做JavaMail测试....<br/><img src='cid:201103.jpg'>",

                         "text/html;charset=utf-8");

 

           MimeBodyPart image = new MimeBodyPart();

 

           image.setDataHandler(new DataHandler(new FileDataSource(

                  "src//201103.jpg")));

 

           image.setContentID("201103.jpg");

 

           MimeMultipart mm = new MimeMultipart();

 

           mm.addBodyPart(text);

 

           mm.addBodyPart(image);

 

           mm.setSubType("related");

 

           message.setContent(mm);

 

           message.saveChanges();

 

       } catch (AddressException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       } catch (MessagingException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

 

       return message;

    }

}

 

201133