Java-Mail Java程序发送Email
首先我们需要拥有的是一个账号,不管是什么邮箱账号,最好是163邮箱账号(无所谓)。
有了邮箱账号我们要做的就是去开启邮箱的第三方登录功能。在我们登陆了邮箱之后,我们要按照下图中的步骤去操作开启第三方登陆的功能。
所有的有关SMTP相关的服务都打开,这里会设置一个秘钥,类似于第三方登陆的密码,所以大家要记住这秘钥,我们在程序中会用的到这个秘钥。
上面这些东西虽然不涉及编码,但是这是最基本的要求,要不我们编写的程序再好也无法完成通过程序发送邮件的功能。
第二部分
编码部分
我们需要导入两个jar包,一个mail.jar , 一个是activation.jar 。
网上去down这两个jar包,down不到的话私信我,发给你。
下面我们封装了一个工具类,具体代码如下 :
package com.mail.util;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
public class MailUtils {
//创建Session时需要传递的参数
private static Properties prop;
private static String username;
private static String password;
private static Properties prop1;
static{
InputStream in = MailUtils.class.getClassLoader().getResourceAsStream("userinfo.properties");
prop1 = new Properties();
try {
prop1.load(in);
} catch (IOException e) {
e.printStackTrace();
}
username = prop1.getProperty("username");
password = prop1.getProperty("password");
prop = new Properties();
//设置服务器地址属性、指向163邮箱的服务器
prop.setProperty("mail.host","smtp.163.com");
//将身份校验功能开启
prop.setProperty("mail.smtp.auth","true");
}
public static Session getSession(){
//内部类重写器返回用户名和密码的方法
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
//此处的username是我们的邮箱名 : wolf1437715969
//此处的passowrd是我们的我们前面提到的秘钥 , 不是该邮箱的登录面
PasswordAuthentication passwordAuthentication = new PasswordAuthentication(username,password);
return passwordAuthentication;
}
};
Session session = Session.getInstance(prop, authenticator);
return session;
}
}
上面的userinfo.properties就类似于原生jdbc中的四大参数,但是这的话,只有登录名和第三方登录秘钥。
发送邮件的代码如下所示 :
package com.mail.service;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import com.mail.util.MailUtils;
public class SendMail1 {
public static void main(String[] args) {
Session session = MailUtils.getSession();
MimeMessage msg = new MimeMessage(session);
try {
//这是发件人的邮箱,这个@163.com前面的号码应该和前面的properties中的信息保持一致
msg.setFrom(new InternetAddress("wolf143771596@163.com"));
//这是发送,就是所谓的明送,就是收件人是谁
msg.setRecipients(RecipientType.TO,"143771596@qq.com");
//这是添加抄送
msg.setRecipients(RecipientType.CC,"wolf143771596@126.com");
//这是添加暗送
msg.setRecipients(RecipientType.BCC,"lilei1355@718.com");
//这是邮件的标题
msg.setSubject("小狼人");
//这是邮件的信息和格式
msg.setContent("Hello 西伯利亚狼 ,我试小狼人 ","text/html;charset=utf-8");
//发送邮件
Transport.send(msg);
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
上图很清晰的反应了代码中的实现。
上述是发送一个文本信息,没有附件,下面我们发送一个带附件的email,看到这,你不应该继续往下看,而是去把上面的代码熟悉,敲熟,下面的只是扩展。
package com.mail.service;
import java.io.File;
import java.io.IOException;
import javax.mail.MessagingException;
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.MimeMessage.RecipientType;
import javax.mail.internet.MimeUtility;
import com.mail.util.MailUtils;
public class SendMail1 {
public static void main(String[] args) {
Session session = MailUtils.getSession();
MimeMessage msg = new MimeMessage(session);
MimeMultipart parts = new MimeMultipart();
MimeBodyPart part1 = new MimeBodyPart();
MimeBodyPart part2 = new MimeBodyPart();
MimeBodyPart part3 = new MimeBodyPart();
try {
//设置邮件标题
msg.setSubject("发送多个文件");
//第一部分,文本
part1.setContent("Hello 西伯利亚狼 ,我试小狼人 ","text/html;charset=utf-8");
//添加需要发送的第二个文件
part2.attachFile(new File("E:/me.jpg"));
//设置该文件在邮件中的附件名
part2.setFileName(MimeUtility.encodeText("wolf.jpg"));
//添加第三个需要发送的文件
part3.attachFile(new File("E:/有多少人.mp3"));
//设置该文件的在文件中附件名
part3.setFileName(MimeUtility.encodeText("有多少人.mp3"));
//把这三个附件放到 MimeMultipart 中
parts.addBodyPart(part1);
parts.addBodyPart(part2);
parts.addBodyPart(part3);
//设置要发送邮件的内容,三个附件
msg.setContent(parts);
msg.setFrom(new InternetAddress("wolf1437715969@163.com"));
msg.setRecipients(RecipientType.TO,"1437715969@qq.com");
Transport.send(msg);
} catch (MessagingException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
多个附件发送成功。