javaMail


利用javaMail进行邮件发送的步骤:
  1. 使用Properties对象封装服务器信息

    要发送邮件,就要和邮件服务器通信,所以需要服务器信息;
    常见的有:
    mail.smtp.host //主机名
    mail.smtp.auth //是事进行身份验证
    mail.smtp.port //邮件服务器端口号
    mail.smtp.socketFactory.class //ssl工厂类
    mail.smtp.socketFactory.port //ssl接口

    更多可以去 这里 了解
  2. 获取session对象

    //不共享

    session session= Session mailsession = Session.getInstance(props,null);

    //单例,共享

    Session mailsession = Session.getDefaultInstance(props,null);

    一般在这里时给在后面的参数中给出一个验证器 Authenticator对象
  3. 用message封装邮件信息
  4. 获取Transport对象发送邮件
示例 :

package cn.mail;

import java.util.Date;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;


public class MailSender {

public void send() throws Exception{
//设置邮件信息
Address formMail = new InternetAddress("zhangsan@126.com");
Address toMail = new InternetAddress("1001000@qq.com");
String subject = "测试邮件";
String content="测试邮件的内容";
/*设置邮件服务器信息*/
Properties props=System.getProperties();
props.put("mail.smtp.host", "smtp.126.com");//主机
props.put("mail.smtp.auth", "true");//做身份验证

//获取session对象
Session mailsession=Session.getInstance(props,new Authenticator() {

@Override
protected PasswordAuthentication getPasswordAuthentication() {
//返回 用户名 与 密码
return new PasswordAuthentication("zhangsan@126.com", "zhansanpass");
}

});
/*设置删除件信息*/
Message msg=new MimeMessage(mailsession) ;

msg.setFrom(formMail);//发件人
msg.addRecipient(RecipientType.TO, toMail);//收件人
msg.setSubject(subject);//主题
msg.setContent(content, "text/html;charset=utf-8");//正文及MIME,此处指定编码有助于防止乱码
msg.setSentDate( new Date() );//发送时间
/*获取Trans并发送*/
Transport trans= mailsession.getTransport("smtp");
trans.send(msg, msg.getAllRecipients());//发送组所有收件人
trans.close();

}

public static void main(String[] args) {
MailSender sender=new MailSender();
try {
sender.send();
} catch (Exception e) {
e.printStackTrace();
}
}

}



使用Spring发送电子邮件:
spring提供了两个接口:
MailMessage :  提供各种方法设置邮件内容
MailSender :  提供邮件发送策略,用它的不同实现类完成不同邮件的发送,同时封装有服务器数据

简单邮件发送步骤:
  1. 创建邮件发送类

    package mail.service;

    import mail.entity.MailInfo;

    import org.springframework.mail.SimpleMailMessage;
    import org.springframework.mail.javamail.JavaMailSenderImpl;

    /**
    * 邮件发送业务
    *
    * @author Administrator
    *
    */
    public class SimpleMailServiceImpl implements IMailService {
    // 邮件发送器
    private JavaMailSenderImpl sender;

    @Override
    public void sendMail(MailInfo mail) throws Exception {
    // 建立邮件消息
    SimpleMailMessage mailMessage = new SimpleMailMessage();

    mailMessage.setTo("xxxxxxxx@qq.com");// 收件人
    mailMessage.setFrom("xxxxxx@qq.com");// 发件人

    mailMessage.setSubject("测试简单文本邮件发送! ");// 主题
    mailMessage.setText(" 测试我的简单邮件发送机制!! ");// 内容


    // 发送邮件
    sender.send(mailMessage);

    System.out.println(" 邮件发送成功.. ");

    }

    public JavaMailSenderImpl getSender() {
    return sender;
    }

    public void setSender(JavaMailSenderImpl sender) {
    this.sender = sender;
    }

    }



  2. 在spring的配置文件中配置MailSender实现Bean

    <?xml version="1.0" encoding="UTF-8"?>
    <beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

    <bean name="sender" class="org.springframework.mail.javamail.JavaMailSenderImpl" >
    <property name="host" value="smtp.126.com" /> <!-- 主机名 -->
    <property name="username" value="username@126.com" /> <!-- 用户名 -->
    <property name="password" value="emailpassword" /> <!-- 密码 -->
    <property name="protocol" value="smtp" /> <!-- 协议 -->
    <property name="port" value="25" /> <!-- 发送端口号 -->
    <property name="javaMailProperties"> <!-- 更多属性 -->
    <props>
    <prop key="mail.smtp.auth">true</prop> <!-- 身份证码 -->
    <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop> <!-- SSL工厂类 -->
    <prop key="mail.smtp.port">465</prop> <!-- smtp 端口号 -->
    <prop key="mail.smtp.socketFactory.port">465</prop> <!-- ssl验证端口 -->
    <prop key="mail.imap.auth.login.disable">false</prop>
    <prop key="mail.debug">true</prop>
    <prop key="mail.smtp.timeout">25000</prop>
    </props>
    </property>
    </bean>

    </beans>

    完成以上步骤就可以发简单邮件了
复杂邮件发送:
复杂邮件的发送和简单邮件发送大同小异,主要区别如下:
  1. MailSender用JavaMailSender这个实现类

    private JavaMailSender sender;


  2. MailMessage 用 MimeMessage这个实现类

    //创建 复杂邮件内容对象
    MimeMessage msg=sender.createMimeMessage();


  3. 设置MimeMessage中的内容时,用工具类 MimeMessageHelper

    //创建 复杂邮件内容 帮助 对象
    MimeMessageHelper helper=new MimeMessageHelper(msg,true,encoding);

    //设置发件人
    helper.setFrom(mail.getFromAddr());

    ....
  4. 处理附件文件名乱码用 MimeUtility类

    //用 MimeUtility进行转码防止中文文件名乱码

    helper.addAttachment( MimeUtility.encodeWord(file.getName()), file);

示例:
邮件信息类

package mail.entity;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 邮件信息封装类
* @author Administrator
*
*/
public class MailInfo {
/**
* 收件人
*/
private String[] toAddr;
/**
* 抄送
*/
private String[] bcc;
/**
* 发件人
*/
private String fromAddr;
/**
* 主题
*/
private String subject;
/**
* 内容
*/
private String text;
/**
* 是否以html方式显示
*/
private boolean html;
/**
* 内容中内嵌文件
*/
private Map<String, File> Inlines = new HashMap<String, File>(0) ;
/**
* 附件
*/
private List<File> attachment = new ArrayList<File>(0);
//###############################
/**
* 是否为复杂邮件
* @return
*/
public boolean isMultipart() {
if(attachment.size()>0||Inlines.size()>0){
return true;
}
return false;
}


// #####################
public MailInfo(){}

public MailInfo(String[] toAddr, String[] bcc, String fromAddr,
String subject, String text) {
super();
this.toAddr = toAddr;
this.bcc = bcc;
this.fromAddr = fromAddr;
this.subject = subject;
this.text = text;
}

public MailInfo(String[] toAddr, String[] bcc, String fromAddr,
String subject, String text, boolean html,
Map<String, File> inlines, List<File> attachment) {
super();
this.toAddr = toAddr;
this.bcc = bcc;
this.fromAddr = fromAddr;
this.subject = subject;
this.text = text;
this.html = html;
Inlines = inlines;
this.attachment = attachment;
}

// ############## 此处省去相应的getter与setter


}


业务类

package mail.service;

import java.io.File;

import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;

import mail.entity.MailInfo;

import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;

/**
* 邮件发送业务
*
* @author Administrator
*
*/
public class MimeMailServiceImpl implements IMailService {
// 邮件发送器
private JavaMailSender sender;
// 邮件编码
private String encoding;

/*
* (non-Javadoc)
*
* @see mail.service.IMailService#sendMail(mail.entity.MailInfo)
*/
@Override
public void sendMail(MailInfo mail) throws Exception {
// 创建 复杂邮件内容对象
MimeMessage msg = sender.createMimeMessage();
// 创建 复杂邮件内容 帮助 对象
MimeMessageHelper helper = new MimeMessageHelper(msg, true, encoding);

// 设置收件人
helper.setTo(mail.getToAddr());
if (mail.getBcc() != null) {
// 设置抄送
helper.setBcc(mail.getBcc());
}
// 设置发件人
helper.setFrom(mail.getFromAddr());
// 设置 邮件标题
helper.setSubject(mail.getSubject());
// 设置邮件 内容 以及 要不要用html方式显示
helper.setText(mail.getText(), mail.isHtml());
// 设置 邮件内嵌文件(图片)
for (String cid : mail.getInlines().keySet()) {
// cid 与 内容中的 模版占位标签对应
helper.addAttachment(cid, mail.getInlines().get(cid));
}
// 设置 邮件 附件
for (File file : mail.getAttachment()) {
// 用 MimeUtility进行转码防止中文文件名乱码
helper.addAttachment(MimeUtility.encodeWord(file.getName()), file);
}
// 发送邮件
sender.send(helper.getMimeMessage());

}

public JavaMailSender getSender() {
return sender;
}

public void setSender(JavaMailSender sender) {
this.sender = sender;
}

public String getEncoding() {
return encoding;
}

public void setEncoding(String encoding) {
this.encoding = encoding;
}

}


spring配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
<!-- 配置邮件信息 -->
<bean name="mail" class="mail.entity.MailInfo" >
<property name="fromAddr" value="skyer518@126.com" />
<property name="toAddr">
<array>
<value>159134323@qq.com</value>
<value>kmanybe@yahoo.com.cn</value>
<value>616234969@qq.com</value>
<value>sk332348@126.com</value>
<value>nielei@xieming.com</value>
</array>
</property>
<property name="subject" value="测试邮件" />
<property name="text" value="这是一封测试邮件" />
<property name="html" value="false" />
</bean>
<!-- 配置sender -->
<bean name="sender" class="org.springframework.mail.javamail.JavaMailSenderImpl" >
<property name="host" value="smtp.126.com" /> <!-- 主机名 -->
<property name="username" value="userame@126.com" /> <!-- 用户名 -->
<property name="password" value="password" /> <!-- 密码 -->
<property name="protocol" value="smtp" /> <!-- 协议 -->
<property name="port" value="25" /> <!-- 发送端口号 -->
<property name="javaMailProperties"> <!-- 更多属性 -->
<props>
<prop key="mail.smtp.auth">true</prop> <!-- 身份证码 -->
<prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop> <!-- SSL工厂类 -->
<prop key="mail.smtp.port">465</prop> <!-- smtp 端口号 -->
<prop key="mail.smtp.socketFactory.port">465</prop> <!-- ssl验证端口 -->
<prop key="mail.imap.auth.login.disable">false</prop>
<prop key="mail.debug">true</prop>
<prop key="mail.smtp.timeout">25000</prop>
</props>
</property>
</bean>
<!-- 配置一个bean 用于测试 -->
<bean name="mailService" class="mail.service.MimeMailServiceImpl" p:sender-ref="sender" p:encoding="utf-8" />

</beans>

测试代码

package test;

import mail.entity.MailInfo;
import mail.service.IMailService;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class T1 {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");

IMailService email = (IMailService) ac.getBean("mailService");
MailInfo mail = (MailInfo) ac.getBean("mail");
try {
email.sendMail(mail);
} catch (Exception e) {
e.printStackTrace();
}
}
}


注意  : 向QQ邮箱发送消息需要加:
<prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop> <!-- SSL工厂类 -->
<prop key="mail.smtp.port">465</prop> <!-- smtp 端口号 -->
<prop key="mail.smtp.socketFactory.port">465</prop> <!-- ssl验证端口 -->


注意:  在结合web项目使用时,需要 activation.jar 支持 







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值