其实我们用Java发送邮件时相当于自定义客户端根据用户名和密码进行登录,然后使用SMTP服务发送邮件。但新注册的163邮件默认是不开启客户端授权验证的(对自定的邮箱大师客户端默认开启),
因此登录总是会被拒绝,验证没有权限。解决办法是进入163邮箱,进入邮箱中心——客户端授权密码,选择开启即可,
设置完毕后,在代码中用使用客户端授权密码代替原始的邮箱密码,这样就可以正确的发送邮件了。
要两个java文件 还有一个mail.jar是不是只能用javamail谁也不敢说第一个:
public class Constant {
public static final String mailAddress ="用户名@163.com"
public static final String mailCount ="用户名"
public static final String mailPassword ="密码"
public static final String mailServer ="smtp.163.com"
//pukeyouxintest,
}
第二个:
import java.util.Date
import java.util.Properties
import javax.mail.Message
import javax.mail.Session
import javax.mail.Transport
import javax.mail.internet.InternetAddress
import javax.mail.internet.MimeMessage
public class SendMail {
/**
* 发送简单邮件
* @param str_from:发件人地址
* @param str_to:收件人地址
* @param str_title:邮件标题
* @param str_content:邮件正文
*/
public static void send(String str_from,String str_to,String str_title,String str_content) {
// str_content="<a href='www.163.com'>html元素</a>"//for testing send html mail!
try {
//建立邮件会话
Properties props=new Properties()//用来在一个文件中存储键-值对的,其中键和值是用等号分隔的,
//存储发送邮件服务器的信息
props.put("mail.smtp.host",Constant.mailServer)
//同时通过验证
props.put("mail.smtp.auth","true")
//根据属性新建一个邮件会话
Session s=Session.getInstance(props)
s.setDebug(true)//有他会打印一些调试信息。
//由邮件会话新建一个消息对象
MimeMessage message=new MimeMessage(s)
//设置邮件
InternetAddress from= new InternetAddress(str_from)//pukeyouxintest2@163.com
message.setFrom(from)//设置发件人的地址
//
// //设置收件人,并设置其接收类型为TO
InternetAddress to=new InternetAddress(str_to)//pukeyouxintest3@163.com
message.setRecipient(Message.RecipientType.TO, to)
//设置标题
message.setSubject(str_title)//java学习
//设置信件内容
// message.setText(str_content)//发送文本邮件 //你好吗?
message.setContent(str_content, "text/htmlcharset=gbk")//发送HTML邮件 //<b>你好</b><br><p>大家好</p>
//设置发信时间
message.setSentDate(new Date())
//存储邮件信息
message.saveChanges()
//发送邮件
Transport transport=s.getTransport("smtp")
//以smtp方式登录邮箱,第一个参数是发送邮件用的邮件服务器SMTP地址,第二个参数为用户名,第三个参数为密码
transport.connect(Constant.mailServer,Constant.mailCount,Constant.mailPassword)
//发送邮件,其中第二个参数是所有已设好的收件人地址
transport.sendMessage(message,message.getAllRecipients())
transport.close()
} catch (Exception e) {
e.printStackTrace()
}
}
public static void main(String[] args) {
//测试用的,你吧你想写的内容写上去就行
send(Constant.mailAddress,"收件人邮箱","标题","<b>内容</b>")
}
}
然后把mail.jar导入,就可以了,我用的是163 的,其他的吧相应的服务器改一下就行了
public class MailTest {//发送的邮箱 内部代码只适用qq邮箱
private static final String USER = "xxxxx@qq.com"
//授权密码 通过QQ邮箱设置->账户->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务->开启POP3/SMTP服务获取
private static final String PWD = "xxxxx"
private String[] to
private String[] cc//抄送
private String[] bcc//密送
private String[] fileList//附件
private String subject//主题
private String content//内容,可以用html语言写
public void sendMessage() throws Exception {
// 配置发送邮件的环境属性
final Properties props = new Properties()
//下面两段代码是设置ssl和端口,不设置发送不出去。
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory")
//props.setProperty("mail.smtp.port", "465")
props.setProperty("mail.smtp.socketFactory.port", "465")
// 表示SMTP发送邮件,需要进行身份验证
props.setProperty("mail.transport.protocol", "smtp")// 设置传输协议
props.put("mail.smtp.auth", "true")
props.put("mail.smtp.host", "smtp.qq.com")//QQ邮箱的服务器 如果是企业邮箱或者其他邮箱得更换该服务器地址
// 发件人的账号
props.put("mail.user", USER)
// 访问SMTP服务时需要提供的密码
props.put("mail.password", PWD)
// 构建授权信息,用于进行SMTP进行身份验证
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// 用户名、密码
String userName = props.getProperty("mail.user")
String password = props.getProperty("mail.password")
return new PasswordAuthentication(userName, password)
}
}
// 使用环境属性和授权信息,创建邮件会话
Session mailSession = Session.getInstance(props, authenticator)
// 创建邮件消息
MimeMessage message = new MimeMessage(mailSession)
BodyPart messageBodyPart = new MimeBodyPart()
Multipart multipart = new MimeMultipart()
// 设置发件人
InternetAddress form = new InternetAddress(
props.getProperty("mail.user"))
message.setFrom(form)
//发送
if (to != null) {
String toList = getMailList(to)
InternetAddress[] iaToList = new InternetAddress().parse(toList)
message.setRecipients(RecipientType.TO, iaToList)// 收件人
}
//抄送
if (cc != null) {
String toListcc = getMailList(cc)
InternetAddress[] iaToListcc = new InternetAddress().parse(toListcc)
message.setRecipients(RecipientType.CC, iaToListcc)// 抄送人
}
//密送
if (bcc != null) {
String toListbcc = getMailList(bcc)
InternetAddress[] iaToListbcc = new InternetAddress().parse(toListbcc)
message.setRecipients(RecipientType.BCC, iaToListbcc)// 密送人
}
message.setSentDate(new Date())// 发送日期 该日期可以随意写,你可以写上昨天的日期(效果很特别,亲测,有兴趣可以试试),或者抽象出来形成一个参数。
message.setSubject(subject)// 主题
message.setText(content)// 内容
//显示以html格式的文本内容
messageBodyPart.setContent(content,"text/htmlcharset=utf-8")
multipart.addBodyPart(messageBodyPart)
//保存多个附件
if(fileList!=null){
addTach(fileList, multipart)
}
message.setContent(multipart)
// 发送邮件
Transport.send(message)
}
public void setTo(String[] to) {
this.to = to
}
public void setCc(String[] cc) {
this.cc = cc
}
public void setBcc(String[] bcc) {
this.bcc = bcc
}
public void setSubject(String subject) {
this.subject = subject
}
public void setContent(String content) {
this.content = content
}
public void setFileList(String[] fileList) {
this.fileList = fileList
}
private String getMailList(String[] mailArray) {
StringBuffer toList = new StringBuffer()
int length = mailArray.length
if (mailArray != null &&length <2) {
toList.append(mailArray[0])
} else {
for (int i = 0i <lengthi++) {
toList.append(mailArray[i])
if (i != (length - 1)) {
toList.append(",")
}
}
}
return toList.toString()
}
//添加多个附件
public void addTach(String fileList[], Multipart multipart) throws Exception {
for (int index = 0index <fileList.lengthindex++) {
MimeBodyPart mailArchieve = new MimeBodyPart()
FileDataSource fds = new FileDataSource(fileList[index])
mailArchieve.setDataHandler(new DataHandler(fds))
mailArchieve.setFileName(MimeUtility.encodeText(fds.getName(),"UTF-8","B"))
multipart.addBodyPart(mailArchieve)
}
}
//以下是演示demo
public static void main(String args[]) {
MailTest mail = new MailTest()
mail.setSubject("java邮件")
mail.setContent("你好 这是第一个java 程序发送邮件")
//收件人 可以发给其他邮箱(163等) 下同
mail.setTo(new String[] {"xxxxx@qq.com"})
//抄送
// mail.setCc(new String[] {"xxxxx@qq.com","xxxxx@qq.com"})
//密送
//mail.setBcc(new String[] {"xxxxx@qq.com","xxxxx@qq.com"})
//发送附件列表 可以写绝对路径 也可以写相对路径(起点是项目根目录)
// mail.setFileList(new String[] {"D:\\aa.txt"})
//发送邮件
try {
mail.sendMessage()
System.out.println("发送邮件成功!")
} catch (Exception e) {
System.out.println("发送邮件失败!")
e.printStackTrace()
}
}
}
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)