我已经编写了发送邮件的java代码,它提供了异常:当我使用端口号465时
com.sun.mail.smtp.SMTPSendFailedException:530-5.5.1需要验证。在530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 l1sm2119061pbe.54
了解更多信息
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
String USERNAME = username;
String PASSWORD = password;
Properties props = new Properties();
props.put("mail.smtp.host", smtpHost);
if(smtpPort != null){
int SMTP_PORT = Integer.parseInt(smtpPort);
props.put("mail.smtp.port", SMTP_PORT);
}
props.put("mail.from",from);
props.put("mail.smtp.starttls.enable", "true");
if( auth == 1){
props.put("mail.smtp.auth", "true");
}
props.put("mail.debug", "true");
Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(USERNAME, PASSWORD);
}
});
MimeMessage msg = new MimeMessage(session);
msg.setFrom();
msg.setRecipients(Message.RecipientType.TO, to);
msg.setSubject(subject);
msg.setSentDate(new Date());
Multipart content = new MimeMultipart();
MimeBodyPart bodyPart = new MimeBodyPart();
bodyPart.setText(htmlBody, "UTF-8");
bodyPart.setContent(htmlBody, "text/html");
content.addBodyPart(bodyPart);
if ( attachmentPath != null ){
String[] a = attachmentPath.split(",");
for (int i = 0; i < a.length; i++) {
if( a[i] != null )
{
MimeBodyPart attachmentPart = new MimeBodyPart();
attachmentPart.attachFile(a[i].trim());
content.addBodyPart(attachmentPart);
}
}
}
msg.setContent(content);
Transport.send(msg);
return true
答案 0 :(得分:1)
代码是不言自明的,这是我在项目中使用的工作代码。希望这可以帮到你。祝你好运。
/**
GmailSmtpSSL emailNotify = new GmailSmtpSSL(cred[ID], cred[PASS]);
emailNotify.sendMailTo("self","Testing AlfaDX Gmail module", "Yes it works");
**/
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class GmailSmtpSSL {
GmailSmtpSSL(String username,String password) {
usern = username;
pass = password;
setDebugMsg("Setting user name to : "+usern);
setDebugMsg("Using given password : "+pass);
props = new Properties();
setDebugMsg("Setting smtp server: smtp.gmail.com");
setDebugMsg("Using SSL at port 465 auth enabled");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.user", usern);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
//props.put("mail.smtp.debug", "true");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
SMTPAuthenticator auth = new SMTPAuthenticator();
session = Session.getDefaultInstance(props, auth);
session.setDebug(true);
setDebugMsg("Session initialization complete");
}
public void destroy() {
props.clear();
props = null;
usern = null;
pass = null;
session = null;
}
public void sendMailTo(String to, String sub, String body)
throws MessagingException {
Calendar currentDate = Calendar.getInstance();
SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss a");
String dateToday = formatter.format(currentDate.getTime()).toLowerCase();
if (to.equals("self"))
to = usern;
setDebugMsg("Composing message: To "+to);
setDebugMsg("Composing message: Subject "+sub);
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(usern));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(to));
message.setSubject("PinguBot: "+dateToday+" "+sub);
message.setText(body);
setDebugMsg("Attempting to send...");
Transport transport = session.getTransport("smtps");
transport.connect("smtp.gmail.com", 465, usern, pass);
Transport.send(message);
transport.close();
}
catch(MessagingException me) {
setDebugMsg(me.toString());
throw new MessagingException(me.toString());
}
setDebugMsg("Mail was send successfully");
}
public String getDebugMsg() {
String msg = new String(debugMsg);
debugMsg = " ";
return msg;
}
private static void setDebugMsg(String msg) {
debugMsg += msg + "\n";
System.out.println(msg);
}
private static String debugMsg = "";
private String usern;
private String pass;
private Session session;
private static Properties props;
private class SMTPAuthenticator extends Authenticator
{
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(usern, pass);
}
}
}
答案 1 :(得分:0)
当我使用端口号-1
时
不足为奇。 -1不是有效的端口号。使用正确的端口号时会发生什么?
当我使用端口号465
时
这也不是标准的SMTP端口。
使用正确的端口号时会发生什么?
答案 2 :(得分:0)
使用以下代码验证并使用javax.mail
向Gmail服务器发送邮件。注意防火墙和您选择的主机端口。
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
final class MailClient
{
private class SMTPAuthenticator extends Authenticator
{
private PasswordAuthentication authentication;
public SMTPAuthenticator(String login, String password)
{
authentication = new PasswordAuthentication(login, password);
}
@Override
protected PasswordAuthentication getPasswordAuthentication()
{
return authentication;
}
}
public void mail()
{
try
{
String from = "xyz.com";
String to = "abc.com";
String subject = "Your Subject.";
String message = "Message Text.";
String login = "xyz.com";
String password = "password";
Properties props = new Properties();
props.setProperty("mail.host", "smtp.gmail.com");
props.setProperty("mail.smtp.port", "587");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.starttls.enable", "true");
Authenticator auth = new SMTPAuthenticator(login, password);
Session session = Session.getInstance(props, auth);
MimeMessage msg = new MimeMessage(session);
try
{
msg.setText(message);
msg.setSubject(subject);
msg.setFrom(new InternetAddress(from));
msg.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
Transport.send(msg);
}
catch (MessagingException ex)
{
Logger.getLogger(MailClient.class.getName()).
log(Level.SEVERE, null, ex);
}
}
}
}
final public class Main
{
public static void main(String...args)
{
new MailClient().mail();
}
}