Java Mail: невозможно отправить электронную почту через Yahoo

77
8

Пожалуйста, ознакомьтесь со следующим кодом.

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 Доступ запрещен

Адрес электронной почты Yahoo и пароль даны правильно, но эта проблема продолжается. Почему это? Пожалуйста помоги!

спросил(а) 2020-04-04T00:40:11+03:00 3 месяца назад
1
Решение
54

При входе в систему попробуйте не использовать "@yahoo.com", просто ваше имя пользователя

ответил(а) 2020-04-04T00:52:35.397199+03:00 3 месяца назад
39

Почему у вас есть дифференциация между тем, как вы используете gmail и yahoo в своем коде?
Вы пробовали использовать start.tls.enable=true для yahoo, а вместо двух строк с SocketFactory?

ответил(а) 2020-04-04T00:40:11+03:00 3 месяца назад
39
39

Вам нужно изменить параметры. Вы прошли "Gmail" для Yahoo Code и "Yahoo" для кода Gmail. Измените эти параметры.

if(getAccount().equals("Yahoo"));

else if(getAccount().equals("GMail"));

И SMTP Host также должен быть изменен.

Он должен работать.

ответил(а) 2020-04-04T00:40:11+03:00 3 месяца назад
40

Не забудьте отключить менее безопасный вход здесь https://login.yahoo.com/account/security?el=1&done=https%3A%2F%2Fwww.yahoo.com&crumb=Fb3iREAVZwY&.scrumb=k3h5YYmGz%2Fw&guccounter=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", "**********");
}
});'

ответил(а) 2020-04-04T00:40:11+03:00 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема