java实现邮件上
2016-04-28 11:35
411 查看
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;
import javax.mail.internet.MimeUtility;
import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
public static void sendAttachmentEmail(String mailTitle,String mailHostName,String mailAuthorName,String mailAuthorPwd,String mailFrom, String mailContent,String [] mailReceiverAddress,String []attachmentPaths,String []attachmentFileNames)
throws Exception {
Properties props = new Properties();
props.put("mail.smtp.host", mailHostName); //设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器)
props.put("mail.smtp.auth", "true"); //需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条)
Session session = Session.getDefaultInstance(props); //用刚刚设置好的props对象构建一个session
session.setDebug(false); //若为true便可以在发送邮件的过程中在console处显示过程信息,供调试使用(你可以在控制台(console)上看到发送邮件的过程)
MimeMessage mailMessage = new MimeMessage(session); //用session为参数定义消息对象
Transport transport = null;
try {
mailMessage.setFrom(new InternetAddress(mailFrom)); //设置发件人地址
for (int i = 0; i < mailReceiverAddress.length; i++) { //发送给多个人
mailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(mailReceiverAddress[i])); //加载收件人地址
}
mailMessage.setSubject(MimeUtility.encodeText(mailTitle, "UTF-8", "B")); //设置邮件标题
Multipart multipart = new MimeMultipart(); //(MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象)向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
BodyPart bodyPart = new MimeBodyPart(); //创建一个MimeBodyPart对象
bodyPart.setContent(mailContent, "text/html; charset=UTF-8"); //设置邮件内容
multipart.addBodyPart(bodyPart); //将邮件内容添加到
if(attachmentPaths.length!=attachmentFileNames.length){
throw new Exception("附件绝对路径数量和附件文件名数量不一致!");
}else{
for (int i = 0; i < attachmentFileNames.length; i++) {
bodyPart = new MimeBodyPart(); //创建一个MimeBodyPart对象,用来添加邮件附件
DataSource datasource = new FileDataSource(attachmentPaths[i]+attachmentFileNames[i]); //获取附件文件
bodyPart.setDataHandler(new DataHandler(datasource)); //将附件添加到邮件中
bodyPart.setFileName(MimeUtility.encodeWord(attachmentFileNames[i],"gb2312", null)); //(附件名)防止中文附件文件名乱码问题
multipart.addBodyPart(bodyPart); //将附件添加到
}
}
mailMessage.setSentDate(new Date()); //邮件发送时间
mailMessage.setContent(multipart); //将multipart对象放到mailMessage中
mailMessage.saveChanges(); //保存邮件
transport = session.getTransport("smtp"); //发送邮件
transport.connect(mailHostName, mailAuthorName, mailAuthorPwd); // 连接服务器的邮箱
transport.sendMessage(mailMessage, mailMessage.getAllRecipients()); //把邮件发送出去
transport.close(); //关闭邮件流
} catch (Exception e) {
log.error("邮件发送异常!!!!");
throw e;
}finally{
if(null != transport){
try {
transport.close();
} catch (MessagingException e) {
log.error("MessagingException:"+e);
}
}
}
}
问题1:遇到保存时报空指针
(1)检查是否有调用空的映射值。(2)检查文件存取路径是否正确。
问题2:javax.mail.AuthenticationFailedException: 535 Authentication failed
(1) 用户名密码不匹配,或者不正确
(2) 邮件服务器连接失败
(3) Transport发送对象的connect函数中的主机名不一致,即connect中的host("smtp.xxx.com")要跟发件人的host相同
(4)邮件的用户名不能用全名,如oa@kingkey.com.cn,这样会导致验证密码错误,而去掉用户全名后,如用:oa,这时邮件正常收发了!
(5)邮箱服务器在新环境未验证。
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;
import javax.mail.internet.MimeUtility;
import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
public static void sendAttachmentEmail(String mailTitle,String mailHostName,String mailAuthorName,String mailAuthorPwd,String mailFrom, String mailContent,String [] mailReceiverAddress,String []attachmentPaths,String []attachmentFileNames)
throws Exception {
Properties props = new Properties();
props.put("mail.smtp.host", mailHostName); //设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器)
props.put("mail.smtp.auth", "true"); //需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条)
Session session = Session.getDefaultInstance(props); //用刚刚设置好的props对象构建一个session
session.setDebug(false); //若为true便可以在发送邮件的过程中在console处显示过程信息,供调试使用(你可以在控制台(console)上看到发送邮件的过程)
MimeMessage mailMessage = new MimeMessage(session); //用session为参数定义消息对象
Transport transport = null;
try {
mailMessage.setFrom(new InternetAddress(mailFrom)); //设置发件人地址
for (int i = 0; i < mailReceiverAddress.length; i++) { //发送给多个人
mailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(mailReceiverAddress[i])); //加载收件人地址
}
mailMessage.setSubject(MimeUtility.encodeText(mailTitle, "UTF-8", "B")); //设置邮件标题
Multipart multipart = new MimeMultipart(); //(MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象)向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
BodyPart bodyPart = new MimeBodyPart(); //创建一个MimeBodyPart对象
bodyPart.setContent(mailContent, "text/html; charset=UTF-8"); //设置邮件内容
multipart.addBodyPart(bodyPart); //将邮件内容添加到
if(attachmentPaths.length!=attachmentFileNames.length){
throw new Exception("附件绝对路径数量和附件文件名数量不一致!");
}else{
for (int i = 0; i < attachmentFileNames.length; i++) {
bodyPart = new MimeBodyPart(); //创建一个MimeBodyPart对象,用来添加邮件附件
DataSource datasource = new FileDataSource(attachmentPaths[i]+attachmentFileNames[i]); //获取附件文件
bodyPart.setDataHandler(new DataHandler(datasource)); //将附件添加到邮件中
bodyPart.setFileName(MimeUtility.encodeWord(attachmentFileNames[i],"gb2312", null)); //(附件名)防止中文附件文件名乱码问题
multipart.addBodyPart(bodyPart); //将附件添加到
}
}
mailMessage.setSentDate(new Date()); //邮件发送时间
mailMessage.setContent(multipart); //将multipart对象放到mailMessage中
mailMessage.saveChanges(); //保存邮件
transport = session.getTransport("smtp"); //发送邮件
transport.connect(mailHostName, mailAuthorName, mailAuthorPwd); // 连接服务器的邮箱
transport.sendMessage(mailMessage, mailMessage.getAllRecipients()); //把邮件发送出去
transport.close(); //关闭邮件流
} catch (Exception e) {
log.error("邮件发送异常!!!!");
throw e;
}finally{
if(null != transport){
try {
transport.close();
} catch (MessagingException e) {
log.error("MessagingException:"+e);
}
}
}
}
问题1:遇到保存时报空指针
(1)检查是否有调用空的映射值。(2)检查文件存取路径是否正确。
问题2:javax.mail.AuthenticationFailedException: 535 Authentication failed
(1) 用户名密码不匹配,或者不正确
(2) 邮件服务器连接失败
(3) Transport发送对象的connect函数中的主机名不一致,即connect中的host("smtp.xxx.com")要跟发件人的host相同
(4)邮件的用户名不能用全名,如oa@kingkey.com.cn,这样会导致验证密码错误,而去掉用户全名后,如用:oa,这时邮件正常收发了!
(5)邮箱服务器在新环境未验证。
相关文章推荐
- Java基础——Set接口
- struts2.3.28升级
- [javase]通过异常处理错误
- 火狐浏览器造成 spring3 MVC action的方法会执行两次
- java分页之假分页实现简单的分页器
- ZeroMQ(java)中监控Socket
- Java 标签 看了这个想不理解都难
- ZeroMQ(java)中的数据流SessionBase与SocketBase
- Java.math.BigDecimal.subtract()方法实例
- Trie的java实现
- java.io小结
- struts标签
- 第 N 项斐波那契数列的值—Java
- 自定义java注解
- java.lang.OutOfMemory
- ZeroMQ(java)中组件间数据传输(Pipe的实现)
- Java动态代理
- 【Red5】如何搭建环境以及调试Red5(1.0.6版本)应用(一)
- Java反射机制学习(二)java.lang.reflect.Array
- 多种Spring.jar详解