使用Java应用程序发送 E-mail 十分简单,程序依赖于两个必需的jar包 。
- 您可以从 Java 网站下载最新版本的 JavaMail,打开网页右侧有个 Downloads 链接,点击它下载。
- 您可以从 Java 网站下载最新版本的 JAF(版本 1.1.1)。
你也可以使用本文提供的下载链接:
关于邮件开发中的主要函数和参数:
因为在程序开发中使用邮件的目的多是发送验证码,我把生成验证码的函数分离出来,作为单独的程序:
package Utils;
import java.util.Random;
public class regCode {
public static String rand() {
String sources = "0123456789"; // 加上一些字母,就可以生成带字母的验证码
Random rand = new Random();
StringBuffer flag = new StringBuffer();
for (int j = 0; j < 6; j++) {
flag.append(sources.charAt(rand.nextInt(9)) + "");
}
return flag.toString();
}
}
关于QQ邮箱,还要设置SSL加密;163邮箱便不需要。下面的代码是基于QQ邮箱。
此外,对于邮件内容,可以是正常的文本,也可以是HTML文本,当然,也要有添加附件的需求。在程序中,均会给出解决方案。注释很详细。
import java.io.File;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Properties;
import com.sun.mail.util.MailSSLSocketFactory;
import javax.mail.*;
import javax.mail.internet.*;
public class SendEmail {
static String regcode = Utils.regCode.rand(); //获取验证码
public static void sendEmail() throws GeneralSecurityException, MessagingException, IOException {
// 收件人电子邮箱
String tomail = "han-suyu@foxmail.com";
// 发件人电子邮箱
final String frommail = "1121687782@qq.com"; //邮箱账号
final String fromcode = "XXXXXXXXXXXXXXXXX"; //邮箱授权码
// 指定发送邮件的主机为 smtp.qq.com
String host = "smtp.qq.com"; // QQ 邮件服务器,如果发件人为网易邮箱,则为"smtp.163.com"
// 获取系统属性
Properties properties = System.getProperties();
// 设置邮件服务器
properties.setProperty("mail.smtp.host", host);
properties.put("mail.smtp.auth", "true");
// 关于QQ邮箱,还要设置SSL加密
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
properties.put("mail.smtp.ssl.enable", "true");
properties.put("mail.smtp.ssl.socketFactory", sf);
// 获取默认session对象
Session session = Session.getDefaultInstance(properties, new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(frommail, fromcode); //发件人用户名、密码
}
});
// 创建默认的 MimeMessage 对象
MimeMessage message = new MimeMessage(session);
// Set From: 头部头字段
message.setFrom(new InternetAddress(frommail));
// Set To: 头部头字段
message.addRecipient(Message.RecipientType.TO, new InternetAddress(tomail));
// Set Subject: 头部头字段
message.setSubject("这里是主题");
//邮件内容
/***************************************************************************************/
//支持附件的邮件
//创建多元素容器
MimeMultipart list = new MimeMultipart();
// 创建文本部分
MimeBodyPart part1 = new MimeBodyPart();
part1.setContent("<h3>验证码为:</h3>"+ regcode,"text/html;charset=utf-8");
list.addBodyPart(part1);
// 创建附件部分
MimeBodyPart part2 = new MimeBodyPart();
part2.attachFile(new File("D:/测试.jpg"));//设置附件的内容
//设置显示的文件名称,其中encodeText用来处理中文乱码问题
part2.setFileName(MimeUtility.encodeText("测试图片.txt"));
list.addBodyPart(part2); // 把主体部件添加到集合中
//把整个容器加入到邮件中
message.setContent(list);
//只有文本的邮件
/***
* // 设置文字消息
* message.setText("此次验证码为:" + regcode);
*
* // 发送 HTML 消息, 可以插入html标签
* message.setContent("<h1>This is actual message</h1>","text/html" );
*/
/***************************************************************************************/
// 发送消息
Transport.send(message);
System.out.println("邮件发送成功....");
}
}
参考: