一、SMTP服务器:
网易163邮箱():SMTP服务器地址:(端口:25)网易126邮箱():SMTP服务器地址:(端口:25)移动139邮箱():SMTP服务器地址:(端口:25)腾讯QQ邮箱():SMTP服务器地址: (端口:25)SMTP认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录SMTP服务器,这就使得那些垃圾邮件的散播者无可乘之机。可增加SMTP认证的目的是为了使用户避免受到垃圾邮件的侵扰。
//SMTP服务器连接信息Properties props=new Properties();props.put("mail.smtp.host", ""); //SMTP主机名props.put("mail.smtp.port", "25"); //主机端口号props.put("mail.smtp.auth", "true"); //是否需要用户认证props.put("mail.smtp.starttls.enable", "true"); //启动TLS加密
二.创建Session会话
当发送邮件时,我们每次都要先创建Session,再输入邮箱的账号密码,建立连接信息,过于繁琐,所以我们可以在这里创建一个JavaMailUtils类,每次创建连接时,只需要调用JavaMailUtils类里的createsession()方法即可,大大减少了代码的冗余。
public final class JavaMailUtils {public JavaMailUtils() {}public static Session createSession() {// 邮箱账号信息String userName = "151********@"; // 邮箱发送账号String password = "********"; // 账号授权密码// SMTP服务器连接信息Properties props = new Properties();props.put("mail.smtp.host", ""); // SMTP主机名props.put("mail.smtp.port", "25"); // 主机端口号props.put("mail.smtp.auth", "true"); // 是否需要用户认证props.put("mail.smtp.starttls.enable", "true"); // 启动TLS加密// 创建Session会话// 参数1:smtp服务器连接参数u// 参数2:账号和密码的授权认证对象Session session = Session.getInstance(props, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(userName, password);}});return session;}}
三.发送邮件
1、发送HTML纯文字内容邮件
首先,我们还是要创建Session,当然这次我们只需调用JavaMailUtils的createsession()方法 就行。然后创建Message对象,因为Message类是一个抽象类,所以我们只能创建其子类对象,然后将session传入。接着调用setFrom()方法选择发件人,setRecipient()方法选择收件人,收件人可以是一个或者多个;当接收方是个多个,要对邮箱账号设置成一个InternetAddress[ ]数组。(RecipientType.TO代表收件人,代表抄送人。)setSubject()方法选择输入邮件的标题;setText()方法输入邮件的正文.发送正文带有"html"标签的邮件,可以在需要修改的内容前后加上html的修饰符进行修改。例:让"好饿"两个字加粗。最后通过Transport的send()方法完成发送邮件。
// 1.创建Session会话Session session = JavaMailUtils.createSession();// 2.创建邮件对象try {MimeMessage message = new MimeMessage(session);//设置发送方message.setFrom(new InternetAddress("151********@"));//设置接收方(1个)message.setRecipient(RecipientType.TO, new InternetAddress("********@"));//当接收方是多个时抄送,设置成数组类型message.setRecipients(, new InternetAddress[] {new InternetAddress("*********@"),new InternetAddress("**********@") }); //设置标题message.setSubject("测试邮件!!!"); //发送内容,邮件正文内容包含html内容message.setText("我<b>好饿</b>啊!", "utf-8", "html"); //发送Transport.send(message);} catch (MessagingException e) {e.printStackTrace();}
2、发送带有附件的HTML邮件
当发送带有附件的邮件时需要创建邮件内容"复合"对象,Multipart类的MimeMultipart实现类,然后再创建BodyPart类的MimeBodyPart实现类。
textPart用于存储正文内容,调用setContent()方法,参数1为正文内容,参数2为内容类型;字符编码集。
filePart用于存储附件,先调用setFileName()方法设置附件文件的显示名称(显示名称可以与原名不一致)。再调用setDataHandler(),其中添加一个DataHandler()方法,使用Files工具类的readAllBytes()方法,可以把文件读取成字节数据, 最后,通过setContent()把Multipart添加到Message中,即可发送邮件。
application/octet-stream:浏览器在请求资源时,会通过http返回头中的content-type决定如何显示/处理将要加载的数据,Content-Type: application/octet-stream,告知浏览器这是一个字节流,浏览器处理字节流的默认方式就是下载。
// 正文BodyPart textPart = new MimeBodyPart();textPart.setContent("我从<b>山中</b>来,带着<b>兰花草</b>!", "text/html;charset=utf-8");// 附件BodyPart filePart = new MimeBodyPart();filePart.setFileName("测试文件");// 上传附件文件filePart.setDataHandler(new DataHandler(new ByteArrayDataSource(Files.readAllBytes(Paths.get("D:\\test\\maomao\\mao.jpg")),"application/octet-stream")));// 将正文+附件组装成Multipart对象Multipart multipart=new MimeMultipart();multipart.addBodyPart(textPart);multipart.addBodyPart(filePart);//放入邮件message.setContent(multipart);//发送邮件Transport.send(message);
3、发送内嵌图片的HTML邮件
与发送带有附件的邮件类似,也是两部分。一部分是textPart,一部分是图片内容imagePart。
imagePart用于存储图片,先调用setFileName()方法设置图片的显示名称。再调用setDataHandler(),其中添加一个DataHandler()方法,使用Files工具类的readAllBytes()方法,可以把文件读取成字节数据。
这里通过StringBuilder定义了一个字符串,将文字内容和图片内容通过字符串的拼接形成一个整体。邮件正文部分中用<img src=“cid:别名”/>,附件名通过.setHeader(“Content-ID”, “<别名>”)的方法设置。
// 创建Session会话Session session = JavaMailUtils.createSession();try {// 创建邮件对象MimeMessage message = new MimeMessage(session);message.setFrom(new InternetAddress("151********@"));message.setRecipient(RecipientType.TO, new InternetAddress("*********@"));message.setSubject("测试邮件!!!"); // 邮件正文BodyPart textPart = new MimeBodyPart();StringBuilder contentText = new StringBuilder();contentText.append("<h3>哈吉咪</h3>");contentText.append("<p>hhhhhhhhhhhh</p>");// 通过内容ID引用附件图片contentText.append("<img src=\"cid:cbkj\"/>");textPart.setContent(contentText.toString(), "text/html;charset=utf-8");//附件BodyPart imagePart = new MimeBodyPart();imagePart.setFileName("测试图片");//上传图片文件imagePart.setDataHandler(new DataHandler(new ByteArrayDataSource(Files.readAllBytes(Paths.get("D:\\test\\maomao\\mao.jpg")), "application/octet-stream")));//图片的内容idimagePart.setHeader("Content-ID", "cbkj");//将正文+附件组装成Multipart对象Multipart multipart = new MimeMultipart();multipart.addBodyPart(textPart);multipart.addBodyPart(imagePart);// 放入邮件message.setContent(multipart);// 发送邮件Transport.send(message);} catch (MessagingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
如果觉得《JavaEmail--发送html格式的电子邮件!》对你有帮助,请点赞、收藏,并留下你的观点哦!