java实现smtp邮件发送

一、准备工作

首先你需要已一个发送邮箱,一般的邮箱都有SMTP、POP3服务,比如QQ邮箱,登陆QQ邮箱开启SMTP服务,开启是服务器会提示你设置独立密码,这个密码是跟邮箱正常登陆的密码不同的,这个是SMTP登陆要用的密码,因此这里需记下SMTP独立密码,程序中会有使用。
(准备工作就是这么简单,只需有一个开启SMTP服务的邮箱即可)
这里贴一下QQ邮箱设置SMTP的位置:登陆邮箱------点击“设置”-------点击“账户”标签页,往下翻就可以看到如下界面

二、一般情况下发送邮件只是中间操作,所以可以使用多线程,开启一个新线程发送邮件,主程序可以继续往下执行。

 1 import java.util.Properties;
 2
 3 import javax.mail.Authenticator;
 4 import javax.mail.MessagingException;
 5 import javax.mail.PasswordAuthentication;
 6 import javax.mail.Session;
 7 import javax.mail.Transport;
 8 import javax.mail.Message.RecipientType;
 9 import javax.mail.internet.InternetAddress;
10 import javax.mail.internet.MimeMessage;
11
12 public class SendMailThread extends Thread{
13
14     private String mailAdr;
15     private String content;
16     private String subject ;
17
18     public SendMailThread(String mailAdr, String subject, String content) {
19         super();
20         this.mailAdr = mailAdr;
21         this.content = content;
22         this.subject = subject;
23     }
24
25     @Override
26     public void run() {
27         // TODO Auto-generated method stub
28         super.run();
29         sendMail(mailAdr,subject,content);
30     }
31
32     /*
33      * mailAdr 收件人地址
34      * subject 邮件标题
35      * content 邮件文本内容
36      */
37     public void sendMail(String mailAdr,String subject,String content){
38         //配置发送邮件的环境属性
39         final Properties props = new Properties();
40         // 表示SMTP发送邮件,需要进行身份验证
41         props.put("mail.smtp.auth", "true");
42         props.put("mail.smtp.host", "smtp.qq.com");
43         //smtp登陆的账号、密码 ;需开启smtp登陆
44         props.put("mail.user", "[email protected]");
45         // 访问SMTP服务时需要提供的密码,不是邮箱登陆密码,一般都有独立smtp的登陆密码
46         props.put("mail.password", "XXXXX");
47
48         // 构建授权信息,用于进行SMTP进行身份验证
49         Authenticator authenticator = new Authenticator() {
50             @Override
51             protected PasswordAuthentication getPasswordAuthentication() {
52                 // 用户名、密码
53                 String userName = props.getProperty("mail.user");
54                 String password = props.getProperty("mail.password");
55                 return new PasswordAuthentication(userName, password);
56             }
57         };
58
59         // 使用环境属性和授权信息,创建邮件会话
60         Session mailSession = Session.getInstance(props, authenticator);
61         // 创建邮件消息
62         MimeMessage message = new MimeMessage(mailSession);
63         // 设置发件人
64         try{
65             InternetAddress form = new InternetAddress(
66                     props.getProperty("mail.user"));
67             message.setFrom(form);
68
69             // 设置收件人
70             InternetAddress to = new InternetAddress(mailAdr);
71             message.setRecipient(RecipientType.TO, to);
72
73             // 设置抄送
74             //InternetAddress cc = new InternetAddress("[email protected]");
75             //message.setRecipient(RecipientType.CC, cc);
76
77             // 设置密送,其他的收件人不能看到密送的邮件地址
78             //InternetAddress bcc = new InternetAddress("[email protected]");
79             //message.setRecipient(RecipientType.CC, bcc);
80
81             // 设置邮件标题
82             message.setSubject(subject);
83             // 设置邮件的内容体
84             message.setContent(content, "text/html;charset=UTF-8");
85             // 发送邮件
86             Transport.send(message);
87         }catch(MessagingException e){
88             e.printStackTrace();
89         }
90     }
91
92     public static void main(String[] args) {
93         // TODO Auto-generated method stub
94         SendMailThread d = new SendMailThread("[email protected]","测试邮件标题","测试邮件001 <br>内容....");
95         d.start();
96         System.out.println("程序继续...");
97     }
98
99 }

三、主程序中调用

SendMailThread mail = new SendMailThread("邮件地址","邮件标题","邮件内容");
mail.start();

补充01:

上面程序中是单个收件接收人,如果需要群发邮件可自行修改程序,下面贴出群发邮件的方法

//群发方式一,用数组
InternetAddress[] adds = new InternetAddress[2];
adds[0] = new InternetAddress("[email protected]");
adds[1] = new InternetAddress("[email protected]");
message.setRecipients(RecipientType.TO, adds);
//群发方式二,直接用String多个地址有逗号隔开
message.setRecipients(RecipientType.TO, "[email protected],[email protected]");

补充02:

上面程序是演示用QQ邮箱发送,也可以用网易等其他邮箱,修改这句即可:

props.put("mail.smtp.host", "smtp.163.com");

不过,经测试发现网易的好像只能发送到网易邮箱,其他邮箱发不到,QQ邮箱就可以发送到其他任何邮箱去。

补充03:

程序调试时可打印发送信息用于查找问题;

创建邮件回话session后加上这条语句:

// 可以从控制台中看一下服务器的响应信息
mailSession.setDebug(true);

以上内容参考来自网络,自己整理如上。

时间: 2024-10-11 06:16:01

java实现smtp邮件发送的相关文章

java工具类-邮件发送

mail-1.4.jar package com.huawei.it.citools.mail; import java.util.Date;import java.util.List;import java.util.Properties; import javax.mail.Address;import javax.mail.BodyPart;import javax.mail.Message;import javax.mail.MessagingException;import javax

java 实现 email 邮件发送最简单优雅的方式(网易 163 为例)

如何使用IMAP服务? 首先介绍一些邮件发送的基础知识,如果你已经知道可以跳过. 直接到 Email 邮件发送实现的部分. IMAP是什么? IMAP,即Internet Message Access Protocol(互联网邮件访问协议),您可以通过这种协议从邮件服务器上获取邮件的信息.下载邮件等. IMAP与POP类似,都是一种邮件获取协议. IMAP和POP有什么区别? POP允许电子邮件客户端下载服务器上的邮件,但是您在电子邮件客户端的操作(如:移动邮件.标记已读等),这是不会反馈到服务

java实现简单邮件发送

java实现简单邮件发送

python学习笔记(SMTP邮件发送)

想着给框架添加邮件发送功能.所以整理下python下邮件发送功能 首先python是支持邮件的发送.内置smtp库.支持发送纯文本.HTML及添加附件的邮件 之后是邮箱.像163.qq.新浪等邮箱默认关闭SMTP服务,需要我们手动打开 打开后通过发件人邮箱.授权密码 通过发件人的SMTP服务发送 代码如下: 1 #!/usr/bin/env python 2 # -*- coding: utf_8 -*- 3 4 from email.mime.text import MIMEText 5 fr

PHP SMTP邮件发送(可加附件)

<?php /** * @param $address mixed 收件人 多个收件人/或需要设置收件人昵称时为数组 array($address1,$address1)/array(array('address'=>$address1,'nickname'=>$nickname1),array('address'=>$address2,'nickname'=>$nickname2)) * @param $subject string 邮件主题 * @param $body

C#调用smtp邮件发送几个大坑

1.网易.新浪邮箱新增了一个叫“授权码”的东西,开通smtp服务时,必须开启授权码,并且邮件发送代码中也需要加上授权码,如下代码: //指定邮箱账号和密码,需要注意的是,这个密码是你在邮箱设置里开启服务的时候给你的那个授权码SmtpClient smtpclient = new SmtpClient(); …… NetworkCredential networkCredential = new NetworkCredential(sendEmail, sendpwd); smtpclient.C

SMTP邮件发送命令

第一步,远程登录smtp服务器 在命令行窗口输入 telnet smtp.163.com 25 然后回车第二步,用户登录 输入 helo 163.com 回车,这是向服务器表明你的用户身份250 OK 为服务器返回的确认信息,说明服务器认可了你的身份 输入 auth login 回车,这是告诉服务器你要输入用户名了(即登录邮箱时的用户名),服务器将返回一个确认信息334 这时就可以输入用户名了,注意这里的用户名需要编码后才能识别,即如果你的用户名是 [email protected] 那么你需要

Spring进阶—如何用Java代码实现邮件发送(二)

上次给大家分享了怎样发送简单邮件,本次给大家继续分享附件的发送.内嵌html.模版文件的发送. 发送带附件的邮件: Multipart email允许添加附件和内嵌资源(inline resources): 使用一个简单的JPEG图片作为附件,android.png放在工程的根目录,以相对路径的方式加载. 发送内嵌资源的邮件: 内嵌资源可能是你在信件中希望使用的图像或样式表,但是又不想把它们作为附件. 内嵌资源源使用Content-ID(上例中是android.png)来插入到mime信件中去.

【python】smtp邮件发送

纯文本: #!/usr/bin/env python3 #coding: utf-8 import smtplib from email.mime.text import MIMEText from email.header import Header sender = '***' receiver = '***' subject = 'python email test' smtpserver = 'smtp.163.com' username = '***' password = '***'