常用邮件服务商的SMTP信息:
QQ邮A箱:SMTP服务器是smtp.qq.com,端口是465/587
163邮箱:SMTP服务器是smtp.163.com,端口是465
Gmail邮箱:SMTP服务器是smtp.gmail.com,端口是465/587
通过JavaMail API连接到SMTP服务器上,连接SMTP服务器时,需要准备一个Properties对象,填入相关信息。
//SMTP服务器连接信息
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.163.com");//SMTP主机名
props.put("mail.smtp.port", "25");//主机端口号
//是否需要认证
props.put("mail.smtp.auth", "true");
//启用TLS加密
props.put("mail.smtp.starttls.enable", "true");
最后获取Session实例时,如果服务器需要认证,还需要传入一个Authenticator对象,并返回指定的用户名和口令。当我们获取到Session实例后,打开调试模式可以看到SMTP通信的详细内容,便于调试。
String userName = "m18091491321@163.com";
String password = "********";
//SMTP服务器连接信息
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.163.com");//SMTP主机名
props.put("mail.smtp.port", "25");//主机端口号
props.put("mail.smtp.auth", "true");
//是否需要认证
props.put("mail.smtp.starttls.enable", "true");
//启用TLS加密
//创建Session会话
//参数1:smtp服务器连接参数
//参数2:账号和密码的授权认证对象
Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// TODO 自动生成的方法存根
return new PasswordAuthentication(userName, password);
}
});
session.setDebug(true);
System.out.println(session);
发送邮件时,我们需要构造一个Message对象,然后调用Transport.send(Message)即可完成发送:绝大多数邮件服务器要求发送方地址和登录用户名必须一致,否则发送将失败.
1.创建Session对象
2.创建邮件对象
3.发送邮件
文章来源:https://www.toymoban.com/news/detail-554433.html
//2.创建邮件对象
MimeMessage message = new MimeMessage(session);
//设置文件主题
message.setSubject("测试邮件");
//设置邮件发送方账号
message.setFrom(new InternetAddress("m18091491321@163.com"));
//设置邮件接收方
//参数1:接受
//参数2:接收方账号
message.setRecipient(RecipientType.TO, new InternetAddress("1417547535@qq.com"));
//抄送给多个账号
//参数1:抄送
//参数2:账户
message.setRecipients(RecipientType.CC, new InternetAddress[] {new InternetAddress("1417547535@qq.com"),new InternetAddress("1252303367@qq.com")});
//邮件仅包含正文
message.setText("好好学习天天向上");
//3.发送
Transport.send(message);
如果邮件内容既包含正文,又包含附件。可以构造一个Multipart对象。
//邮件既包含正文,又包含附件
//正文
BodyPart textPart = new MimeBodyPart();
textPart.setContent("<h3>我希望你</h3>","text/html;charset=utf-8");
//附件
BodyPart filePart = new MimeBodyPart();
filePart.setDataHandler(
new DataHandler(
new ByteArrayDataSource(Files.readAllBytes(Paths.get("D:\\niuma\\bao.jpg")) , "application/octet-stream")));
//将正文+附件组装成Multipart对象
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(textPart);
multipart.addBodyPart(filePart);
//将Multipart对象放入邮件
message.setContent(multipart);
一个Multipart对象可以添加若干个BodyPart,其中第一个BodyPart是文本,即邮件正文,后面的BodyPart是附件。BodyPart依靠setContent()决定添加的内容,如果添加文本,用setContent("...", "text/plain;charset=utf-8")添加纯文本,或者用setContent("...", "text/html;charset=utf-8")添加HTML文本。如果添加附件,需要设置文件名(不一定和真实文件名一致),并且添加一个DataHandler(),传入文件的MIME类型。二进制文件可以用application/octet-stream,Word文档则是application/msword。
最后,通过setContent()把Multipart添加到Message中,即可发送。
发送内嵌图片的HTML邮件
如果需要在HTML邮件中内嵌图片,可以选择在邮件中加入<img src="http://example.com/test.jpg">,这样的外部图片链接通常会被邮件客户端过滤,并提示用户显示图片并不安全。只有内嵌的图片才能正常在邮件中显示。所以,这种方式并不推荐。
推荐将内嵌图片作为一个附件嵌入邮件,即邮件本身也是Multipart,但需要做一点额外的处理:
//邮件内容
BodyPart textpart = new MimeBodyPart();
StringBuilder sb = new StringBuilder();
sb.append("<h3>Hello</h3>");
sb.append("<img src=\"cid:bgls\"/>");
textpart.setContent(sb.toString(), "text/html;charset=utf-8");
//附件
BodyPart filepart = new MimeBodyPart();
filepart.setDataHandler(new DataHandler(
new ByteArrayDataSource(Files.readAllBytes(Paths.get("D:\\niuma\\bao2.jpg")),"application/octet-stream")));
filepart.setHeader("Content-ID", "bgls");//照片ID
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(textpart);
multipart.addBodyPart(filepart);
message.setContent(multipart);
小结:
使用JavaMail API发送邮件本质上是一个MUA软件通过SMTP协议发送邮件至MTA服务器
打开调试模式可以看到详细的SMTP交互信息
某些邮件服务商需要开启SMTP,并需要独立的SMTP登录密码文章来源地址https://www.toymoban.com/news/detail-554433.html
到了这里,关于JavaMail相关代码案例(邮件发送)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!