user has no permission 不验证 可以设置吗

user has no permission 不验证 可以设置吗,第1张

当传入发送邮箱正确的用户名和密码时,总是收到到:550 User has no permission这样的错误,

其实我们用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()

}

}

}


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/278319.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-20
下一篇2023-04-20

发表评论

登录后才能评论

评论列表(0条)

    保存