请查看以下代码。
package email;
import java.awt.*;
import java.awt.event.*;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;
public class SendEmail
{
private String to, from, bcc, cc, account, message, password, subject;
public SendEmail(String to, String from,String bcc, String cc, String account, String message, String password, String subject)
{
setFrom(from);
setTo(to);
setBCC(bcc);
setCC(cc);
setAccount(account);
setMessage(message);
//setUserName(userName);
setPassword(password);
setSubject(subject);
}
//Setters
public void setFrom(String from)
{
this.from = from;
}
public void setTo(String to)
{
this.to = to;
}
public void setBCC(String bcc)
{
this.bcc = bcc;
}
public void setCC(String cc)
{
this.cc = cc;
}
public void setMessage(String message)
{
this.message = message;
}
/* public void setUserName(String userName)
{
this.userName = userName;
}*/
public void setPassword(String password)
{
this.password = password;
}
public void setAccount(String account)
{
this.account = account;
}
public void setSubject(String subject)
{
this.subject = subject;
}
//Getters
public String getFrom()
{
return from;
}
public String getTo()
{
return to;
}
public String getBcc()
{
return bcc;
}
public String getCC()
{
return cc;
}
public String getMessage()
{
return message;
}
/*public String getUserName()
{
return userName;
}*/
public String getPassword()
{
return password;
}
public String getAccount()
{
return account;
}
public String getSubject()
{
return subject;
}
//This method is used to send the email
public String send()
{
String result = "";
try
{
Session mailSession = Session.getInstance(getProperties(), new PasswordAuthenticator());
MimeMessage msg = new MimeMessage(mailSession);
msg.setFrom(new InternetAddress(from));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
msg.setSubject(subject);
msg.setText(message);
Transport.send(msg);
result = "Mail Sent";
}
catch(Exception e)
{
result = "An error Occured";
e.printStackTrace();
}
return result;
}
//This method will return properties appropreiate for the email account
public Properties getProperties()
{
Properties props = new Properties();
if(getAccount().equals("GMail"))
{
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable","true");
props.put("mail.smtp.host","smtp.gmail.com");
props.put("mail.smtp.port","587");
}
else if(getAccount().equals("Yahoo"))
{
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.socketFactory.port","465");
props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.host","smtp.mail.yahoo.com");
props.put("mail.smtp.port","465");
}
return props;
}
//This class Authnticates the password
private class PasswordAuthenticator extends Authenticator
{
@Override
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(getFrom(), getPassword());
}
}
}
在这里,如果我选择GMail,没问题。但是,如果我尝试使用Yahoo发送电子邮件,则会发生以下错误
javax.mail.AuthenticationFailedException:530拒绝访问
雅虎的邮件地址和密码是正确的,但这个问题仍在继续。为什么是这样?请帮忙!
答案 0 :(得分:2)
登录时请尝试不使用“@ yahoo.com”,只需使用您的用户名
答案 1 :(得分:0)
为什么你在代码中使用gmail和yahoo的方式有区别?
您是否尝试过将start.tls.enable=true
用于yahoo,而不是使用SocketFactory的两行?
答案 2 :(得分:0)
答案 3 :(得分:0)
您需要更改参数。您已通过Yahoo Code的“Gmail”和Gmail代码的“Yahoo”。更改这些参数。
if(getAccount().equals("Yahoo"));
else if(getAccount().equals("GMail"));
并且SMTP主机也应该更改。
它应该有用。
答案 4 :(得分:-1)
不要忘记在此处https://login.yahoo.com/account/security?el=1&done=https%3A%2F%2Fwww.yahoo.com&crumb=Fb3iREAVZwY&.scrumb=k3h5YYmGz%2Fw&guccounter=1禁用安全性较低的登录
Properties props = System.getProperties();
// Setup mail server
props.put("mail.smtp.host", "smtp.mail.yahoo.com");
props.put("mail.smtp.port", 465);
props.put("mail.smtp.auth", true);
props.put("mail.smtp.ssl.enable", true);
props.put("mail.debug", "true");
// Setup authentication, get session
return Session.getInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("*********@yahoo.com", "**********");
}
});`