代码如下:
package com.weimob.finance.utils;
import java.io.UnsupportedEncodingException;import java.util.Date;import java.util.List;import java.util.Properties;import javax.activation.DataHandler;import javax.activation.FileDataSource;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;/** * Java Mail 工具类 * * @author XueQi * @version 1.0 * */ public class MailUtils { private static String host; private static String username; private static String password; private static String from; private static String nick; static { try { // Test Data host = "smtp.qq.com"; username = "yourqq@qq.com"; password = "*******"; from = "yourqq@qq.com"; nick = "nickinfo"; // nick + from 组成邮箱的发件人信息 } catch (Exception e) { e.printStackTrace(); } } /** * 发送邮件 * * @param to * 收件人列表,以","分割 * @param subject * 标题 * @param body * 内容 * @param filepath * 附件列表,无附件传递null * @return * @throws MessagingException * @throws AddressException * @throws UnsupportedEncodingException */ public static boolean sendMail(String to, String subject, String body, List<String> filepath) throws AddressException, MessagingException, UnsupportedEncodingException { // 参数修饰 if (body == null) { body = ""; } if (subject == null) { subject = "无主题"; } // 创建Properties对象 Properties props = System.getProperties(); // 创建信件服务器 props.put("mail.smtp.host", host); props.put("mail.smtp.auth", "true"); // 通过验证 props.put("mail.smtp.port", "465"); props.put("mail.transport.protocol", "smtp"); props.put("mail.smtp.ssl.enable", "true"); //props.put("mail.debug", "true"); // 得到默认的对话对象 Session session = Session.getDefaultInstance(props, null); // 创建一个消息,并初始化该消息的各项元素 MimeMessage msg = new MimeMessage(session); nick = MimeUtility.encodeText(nick); msg.setFrom(new InternetAddress(nick + "<" + from + ">")); // 创建收件人列表 if (to != null && to.trim().length() > 0) { String[] arr = to.split(","); int receiverCount = arr.length; if (receiverCount > 0) { InternetAddress[] address = new InternetAddress[receiverCount]; for (int i = 0; i < receiverCount; i++) { address[i] = new InternetAddress(arr[i]); } msg.addRecipients(Message.RecipientType.TO, address); msg.setSubject(subject); // 后面的BodyPart将加入到此处创建的Multipart中 Multipart mp = new MimeMultipart(); // 附件操作 if (filepath != null && filepath.size() > 0) { for (String filename : filepath) { MimeBodyPart mbp = new MimeBodyPart(); // 得到数据源 FileDataSource fds = new FileDataSource(filename); // 得到附件本身并至入BodyPart mbp.setDataHandler(new DataHandler(fds)); // 得到文件名同样至入BodyPart mbp.setFileName(fds.getName()); mp.addBodyPart(mbp); } MimeBodyPart mbp = new MimeBodyPart(); mbp.setText(body); mp.addBodyPart(mbp); // 移走集合中的所有元素 filepath.clear(); // Multipart加入到信件 msg.setContent(mp); } else { // 设置邮件正文 msg.setText(body); } // 设置信件头的发送日期 msg.setSentDate(new Date()); msg.saveChanges(); // 发送信件 Transport transport = session.getTransport("smtp"); transport.connect(username, password); transport.sendMessage(msg, msg.getRecipients(Message.RecipientType.TO)); transport.close(); return true; } else { System.out.println("None receiver!"); return false; } } else { System.out.println("None receiver!"); return false; } } public static void main(String[] args) throws AddressException, UnsupportedEncodingException, MessagingException { sendMail("toother@qq.com,yourqq@qq.com", "注册信息邮件", "注册邮件,有附件", null); System.out.println("sendMail success!"); } }准备过程:
1.QQ邮箱两个
2.发送邮件的jar包
mail.jar
<dependency>
<groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.5.0-b01</version></dependency>
3.用QQ给QQ发送邮件,发送方得开启第三方登录,也就是授权登录,下面就是获取授权码解释链接
需要开始POP3和SMTP,还有点击生成授权码
4.java代码(上面已附)
5运行,最后显示 250 Mail OK即发送成功
中间可能遇到的问题:
1.邮箱,帐号,密码配置不正确导致报connection failed error!
2.邮箱没有开启smpt协议。如上面步骤3操作
3.报 java.io.FileNotFoundException:
原因是,eclipse 自带的mail jar包与maven导入的mail jar包冲突,删除掉j2ee中mail jar ,冲突即可解决!