javaMail发送邮件
1、简单的邮件发送;
获取Session(会话)对象
Session session = Session.getInstance(properties(属性))
设置properties属性:地址、端口、协议等内容
Properties props = new Properties();
props.setProperty(“mail.transport.protocol”,“smtp”);//邮箱的协议
props.setProperty(“mail.smtp.post”,“smtp.qq.com”);//邮箱的地址
props.setProperty(“mail.transport.port”,“465”);//邮箱的端口
props.setProperty(“mail.smtp.auth”,“true”);//授权
//163邮箱到这就没有了,QQ邮箱想要SLL安全认证;
props.setProperty(“mail.smtp.socketFactory.class”,“javax.net.ssl.SSLSocketFactory”);//java有类提供SSL认证类;
props.setPropetrty(“mail.smtp.socketFactory.fallback”,“false”);//不是SSL认证的我不做处理;
props.setPropetrty(“mail.smtp.socketFactory.port”,“465”);//想要认证的端口号
/**
再把properties放到session的Session.getInstance(里面);
/
//创建一个邮件对象
/
*邮件属于MIme(多用途因特网邮件扩展(Multipurpose Internet Mail Extensions))类型的(如text/html),即Mime/Message
需要一个session对象设置邮件
/
private static MimeMessage createMimeMesage(Session session,String send(发件人地址),String receive(收件人地址),String cReceive(抄送人地址),String mReceive(密送人地址)){
//MimeMessage邮件对象
MimeMessage message = new MimeMessage(session);
//简单的邮件对象有:标题、正文、收件人、发件人;简单邮件《图片、附件》等复杂邮件
//message.addForm("");//发件人。Address[]数组
/
*Address是个抽象类,我们要new出来必须要创建一个他的实现类InternetAddress类;
*new InternetAddress(send,“发件人的名字”,“UTF_8”)//参数,1、发件人地址;2、发件人的名字;3、字符集
*(utf-8)
*/
message.setForm(address);//只需要传入一个address
message.setSubject(“标题”,“UTF_8”);//设置邮件的标题内容,抛出异常
message.setContext(“内容:你好…”,“text/html;charset=utf-8”);//设置有邮件的内容信息,采用网页显示
message.setDate(new Date());//设置邮件的发送时间
//设置收件人的属性
//message.setRecipient(RecipientType,AddFress);
//message.setRecipients(RecipientType,AddFress[]);
//RecipientType收件人类型:普通收件人TO、抄送CC、密送BCC;
message.setRecipient(MimeMessage.RecipientType.To, new InternetAddress(receive,“收件人名字”,“UTF-8”));
message.savChanges();//保存邮件
return message;
}
MimeMessage message = createMimeMesage(session,"1181675233@qq.com"//发件人,"2416746596@qq.com"//收件人,"2416746596@qq.com"//抄送人,"2416746596@qq.com"//密送人);
//1104521695//141511313
Transport transport = session.getTransport();//与服务器建立连接对象
String name = "1181675233@qq.com";
String password = “”;//授权码
transport.connect(name,password);//建立连接需要用户名和授权码,各种不同的邮箱看说明;
transport.sendMessage(message,message.getAllRecipients());//发送邮件,参数1、发送的邮件;2、发送地址,在message里面已经设置过,自己提取出来就可以了;
transport.close();关闭连接
session.setDebug(true);//开启日志提示
===============================
2、带图片和附件的邮件
认识节点
在message.setContent(“正文…”,“text/html;chatset=utf-8”);//下面创建节点
//创建图片节点
MimeBodyPart imagePart = new MimeBodyPath();
DataHandler dataHandler = new DataHandler(new FileDataSource(“src/jvm.png”//文件在本机的地址));//参数图片的地址
imagePart.setDataHandler(dataHandler);
imagePart.setContentID(“myImage”);//给图片一个id
//创建一个文本节点用来加载图片的节点;相当于用HTMl文本加载图片一样,用来显示图片
MimeBodyPart textPart = new MimeBodyPart();
textPart.setContent(“image:<image src=“cid:myImage”/>”,“text/html;charset=utf-8”);//第一个参数
//将图片的节点和文本的节点封装成一个复合节点;
MimeMultipart mm_text_image = new MimeMultipart();
mm_text_image.addBodyPart(imagePart);
mm_text_image.addBodyPart(textPart);
mm_text_image.setSubtype(“related”);//设置两个节点有关联关系
//正文中只能出现普通节点MimeBodyPart,不能出现其他的复合节点MimeMultipart
//需要将MimeMultiPart==>>MimeBodyPart
MimeBodyPart text_image_part = new MimeBodyPart();
text_image_part.setContent(text_image_part//MimeMultiPart参数);
//图片节点+文本节点复合节点>>普通节点
//附件MimeBodyPart
MimeBodyPart attachment = new MimeBodyPart();