这是应用程序的代码。我一直在尝试使用eclipse IDE运行它。我还添加了所有必需的java邮件jar文件
dsn.jar,imap.jar,mailapi.jar,pop3.jar,smtp.jar,mail.jar
。
但它会出现以下错误Could not connect to SMTP host: smtp.gmail.com, port: 587
。
没有防火墙阻止访问,因为在pinging smtp.gmail.com上收到了回复。 我甚至用这种方式尝试过:
javax.mail.MessagingException:无法连接到SMTP主机: smtp.gmail.com,port:587; 嵌套异常是: java.net.ConnectException:连接超时:连接 在com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1972) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:642) 在javax.mail.Service.connect(Service.java:317) 在javax.mail.Service.connect(Service.java:176) 在javax.mail.Service.connect(Service.java:125) 在javax.mail.Transport.send0(Transport.java:194) 在javax.mail.Transport.send(Transport.java:124) 在PlainTextEmailSender.sendPlainTextEmail(PlainTextEmailSender.java:50) 在PlainTextEmailSender.main(PlainTextEmailSender.java:73) 引起:java.net.ConnectException:连接超时:连接 at java.net.DualStackPlainSocketImpl.connect0(Native Method) 在java.net.DualStackPlainSocketImpl.socketConnect(未知来源) at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 在java.net.AbstractPlainSocketImpl.connect(未知来源) 在java.net.PlainSocketImpl.connect(未知来源) 在java.net.SocksSocketImpl.connect(未知来源) 在java.net.Socket.connect(未知来源) 在java.net.Socket.connect(未知来源) 在com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:319) 在com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:233) 在com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1938)
package net.codejava.mail;
import java.util.Date;
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.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class PlainTextEmailSender {
public void sendPlainTextEmail(String host, String port,
final String userName, final String password, String toAddress,
String subject, String message) throws AddressException,
MessagingException {
// sets SMTP server properties
Properties properties = new Properties();
properties.put("mail.smtp.host", host);
properties.put("mail.smtp.port", port);
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
// creates a new session with an authenticator
Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password);
}
};
Session session = Session.getInstance(properties, auth);
// creates a new e-mail message
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(userName));
InternetAddress[] toAddresses = { new InternetAddress(toAddress) };
msg.setRecipients(Message.RecipientType.TO, toAddresses);
msg.setSubject(subject);
msg.setSentDate(new Date());
// set plain text message
msg.setText(message);
// sends the e-mail
Transport.send(msg);
}
/**
* Test the send e-mail method
*
*/
public static void main(String[] args) {
// SMTP server information
String host = "smtp.gmail.com";
String port = "587";
String mailFrom = "user_name";
String password = "password";
// outgoing message information
String mailTo = "email_address";
String subject = "Hello my friend";
String message = "Hi guy, Hope you are doing well. Duke.";
PlainTextEmailSender mailer = new PlainTextEmailSender();
try {
mailer.sendPlainTextEmail(host, port, mailFrom, password, mailTo,
subject, message);
System.out.println("Email sent.");
} catch (Exception ex) {
System.out.println("Failed to sent email.");
ex.printStackTrace();
}
}
}
答案 0 :(得分:1)
通过 Gmail 使用 JDK 7 成功通过 Gmail
设置
转到 Gmail
设置 > 帐户和导入 > 其他Google帐户设置 > ,并在登录&安全
使用以下maven依赖项:
spring-core:4.2.2
spring-beans:4.2.2
spring-context:4.2.2
spring-context-support:4.2.2
spring-expression:4.2.2
commons-logging:1.2
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
我的源代码是:
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import javax.swing.JOptionPane;
import java.util.List;
import java.util.Properties;
public class Email {
public final void prepareAndSendEmail(String htmlMessage, String toMailId) {
final OneMethod oneMethod = new OneMethod();
final List<char[]> resourceList = oneMethod.getValidatorResource();
//Spring Framework JavaMailSenderImplementation
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost("smtp.gmail.com");
mailSender.setPort(465);
//setting username and password
mailSender.setUsername(String.valueOf(resourceList.get(0)));
mailSender.setPassword(String.valueOf(resourceList.get(1)));
//setting Spring JavaMailSenderImpl Properties
Properties mailProp = mailSender.getJavaMailProperties();
mailProp.put("mail.transport.protocol", "smtp");
mailProp.put("mail.smtp.auth", "true");
mailProp.put("mail.smtp.starttls.enable", "true");
mailProp.put("mail.smtp.starttls.required", "true");
mailProp.put("mail.debug", "true");
mailProp.put("mail.smtp.ssl.enable", "true");
mailProp.put("mail.smtp.user", String.valueOf(resourceList.get(0)));
//preparing Multimedia Message and sending
MimeMessage mimeMessage = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setTo(toMailId);
helper.setSubject("I achieved the Email with Java 7 and Spring");
helper.setText(htmlMessage, true);//setting the html page and passing argument true for 'text/html'
//Checking the internet connection and therefore sending the email
if(OneMethod.isNetConnAvailable())
mailSender.send(mimeMessage);
else
JOptionPane.showMessageDialog(null, "No Internet Connection Found...");
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
希望这会对某人有所帮助。
答案 1 :(得分:0)
正如我所说,您的代码没有任何问题。如果有的话,只是做一些测试,尝试删除身份验证部分以查看是否有效:
public void sendPlainTextEmail(String host, String port,
final String userName, final String password, String toAddress,
String subject, String message) throws AddressException,
MessagingException {
// sets SMTP server properties
Properties properties = new Properties();
properties.put("mail.smtp.host", host);
properties.put("mail.smtp.port", port);
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
// *** BEGIN CHANGE
properties.put("mail.smtp.user", userName);
// creates a new session, no Authenticator (will connect() later)
Session session = Session.getDefaultInstance(properties);
// *** END CHANGE
// creates a new e-mail message
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(userName));
InternetAddress[] toAddresses = { new InternetAddress(toAddress) };
msg.setRecipients(Message.RecipientType.TO, toAddresses);
msg.setSubject(subject);
msg.setSentDate(new Date());
// set plain text message
msg.setText(message);
// *** BEGIN CHANGE
// sends the e-mail
Transport t = session.getTransport("smtp");
t.connect(userName, password);
t.sendMessage(msg, msg.getAllRecipients());
t.close();
// *** END CHANGE
}
这是我每天使用我的应用程序发送数十封电子邮件的代码,并且100%保证可以正常工作 - 只要smtp.gmail.com:587
可以访问,当然
答案 2 :(得分:0)
尝试此步骤
Step 2: Send mail from your device or application
如果使用SSL或TLS连接,则可以通过smtp.gmail.com将邮件发送给任何人。
注意:开始配置之前,建议您为所需帐户设置应用程序密码。在使用应用程序密码登录和管理用户的安全设置中了解更多信息。
如果使用SSL,请通过端口465连接到smtp.gmail.com。 (如果您使用的是TLS,请连接端口587。) 使用Google用户名和密码登录以进行身份验证以连接SSL或TLS。 确保您使用的用户名已清除首次登录时出现的验证码单词验证测试。
答案 3 :(得分:0)
在您的本地计算机中禁用防病毒功能,一旦对我有用,请尝试
答案 4 :(得分:0)
对于所有仍在寻找以简单方式说明答案的人,以下是答案:
步骤1: 大多数防病毒程序会阻止计算机通过内部应用程序从计算机发送电子邮件。因此,如果遇到错误,则必须在调用这些电子邮件发送方法/ API时禁用防病毒程序。
步骤2: 默认情况下,对Gmail的SMTP访问是禁用的。要允许应用程序使用您的Gmail帐户发送电子邮件,请执行以下步骤
步骤3: 这是我使用过的代码的代码片段,它可以正常工作。 从EmailService.java:
private Session getSession() {
//Gmail Host
String host = "smtp.gmail.com";
String username = "techdeveloper.aj@gmail.com";
//Enter your Gmail password
String password = "";
Properties prop = new Properties();
prop.put("mail.smtp.auth", true);
prop.put("mail.smtp.starttls.enable", "true");
prop.put("mail.smtp.host", host);
prop.put("mail.smtp.port", 587);
prop.put("mail.smtp.ssl.trust", host);
return Session.getInstance(prop, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
}
我还按照以下步骤在GitHub上撰写了博客文章和可运行的应用程序。请检查:http://softwaredevelopercentral.blogspot.com/2019/05/send-email-in-java.html