Eclipse Java,以编程方式从 Gmail SMTP 发送电子邮件
Eclipse Java, Send email from Gmail SMTP programatically
我正在尝试在 Eclipse 中使用 Java 以编程方式发送电子邮件。我使用最新的 JDK 1.8.0_45 正确设置了项目。我的意思是我已经包含了 mailapi.jar
和 smtp.jar
.
我已经阅读了许多关于该主题的其他帖子,并且我知道我的 Java 构建路径必须包括 mail.jar
。但是,当我搜索文件夹时,没有找到 mail.jar
; mailapi.jar
是最接近的,似乎解决了我在没有它的情况下遇到的包含错误。
这是我的代码:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
public class emailer {
private static String host = "smtp.gmail.com";
private static String user = "**********";
private static String pass = "***********";
public static void sendEmail(String fromAddr, String toAddr, String subject, String body)
{
Properties prop = System.getProperties();
prop.put("mail.smtp.starttls.enable", "true");
prop.put("mail.smtp.host", host);
prop.put("mail.smtp.user", user);
prop.put("mail.smtp.password", pass);
prop.put("mail.smtp.port", "465");
prop.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(prop);
MimeMessage message = new MimeMessage(session);
try
{
message.setFrom(new InternetAddress(fromAddr));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toAddr));
message.setSubject(subject);
message.setText(body);
Transport transport = session.getTransport("smtp");
transport.connect(host, user, pass);
transport.send(message, message.getAllRecipients());
//The above line has a warning message
//"The static method send(Message, Address[]) from the type Transport should be accessed in a static way"
transport.close();
System.out.println("done");
}
catch (AddressException e) {e.printStackTrace();}
catch (MessagingException e) {e.printStackTrace();}
}
}
代码编译没有错误,并且在 运行ning 之后,无限期地继续 运行,从不中断或停止。所以不幸的是我没有堆栈跟踪来显示...任何帮助将不胜感激。
您可能想要包括 javax.mail.jar
这是您可以从中下载的主页
将传出端口更改为 587 而不是 465。这样就摆脱了无限超时(因为 Transport
没有超时值)。此外,使用静态 Transport.send()
会大大简化您的代码(我在使用非静态方法时也确实遇到了一些错误)。所以像这样。
public class Emailer //Class names should always be capitalized
{
private static String host = "smtp.gmail.com";
private static String user = "**********";
private static String pass = "***********";
public static void sendEmail(String fromAddr, String toAddr, String subject, String body)
{
Properties props = new Properties();
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");
Session.getInstance(props, null);
MimeMessage message = new MimeMessage(session);
try
{
message.setFrom(new InternetAddress(fromAddr));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toAddr));
message.setSubject(subject);
message.setText(body);
Transport.send(message, user, pass);
}
catch (AddressException e) {e.printStackTrace();}
catch (MessagingException e) {e.printStackTrace();}
}
我正在尝试在 Eclipse 中使用 Java 以编程方式发送电子邮件。我使用最新的 JDK 1.8.0_45 正确设置了项目。我的意思是我已经包含了 mailapi.jar
和 smtp.jar
.
我已经阅读了许多关于该主题的其他帖子,并且我知道我的 Java 构建路径必须包括 mail.jar
。但是,当我搜索文件夹时,没有找到 mail.jar
; mailapi.jar
是最接近的,似乎解决了我在没有它的情况下遇到的包含错误。
这是我的代码:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
public class emailer {
private static String host = "smtp.gmail.com";
private static String user = "**********";
private static String pass = "***********";
public static void sendEmail(String fromAddr, String toAddr, String subject, String body)
{
Properties prop = System.getProperties();
prop.put("mail.smtp.starttls.enable", "true");
prop.put("mail.smtp.host", host);
prop.put("mail.smtp.user", user);
prop.put("mail.smtp.password", pass);
prop.put("mail.smtp.port", "465");
prop.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(prop);
MimeMessage message = new MimeMessage(session);
try
{
message.setFrom(new InternetAddress(fromAddr));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toAddr));
message.setSubject(subject);
message.setText(body);
Transport transport = session.getTransport("smtp");
transport.connect(host, user, pass);
transport.send(message, message.getAllRecipients());
//The above line has a warning message
//"The static method send(Message, Address[]) from the type Transport should be accessed in a static way"
transport.close();
System.out.println("done");
}
catch (AddressException e) {e.printStackTrace();}
catch (MessagingException e) {e.printStackTrace();}
}
}
代码编译没有错误,并且在 运行ning 之后,无限期地继续 运行,从不中断或停止。所以不幸的是我没有堆栈跟踪来显示...任何帮助将不胜感激。
您可能想要包括 javax.mail.jar
这是您可以从中下载的主页
将传出端口更改为 587 而不是 465。这样就摆脱了无限超时(因为 Transport
没有超时值)。此外,使用静态 Transport.send()
会大大简化您的代码(我在使用非静态方法时也确实遇到了一些错误)。所以像这样。
public class Emailer //Class names should always be capitalized
{
private static String host = "smtp.gmail.com";
private static String user = "**********";
private static String pass = "***********";
public static void sendEmail(String fromAddr, String toAddr, String subject, String body)
{
Properties props = new Properties();
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");
Session.getInstance(props, null);
MimeMessage message = new MimeMessage(session);
try
{
message.setFrom(new InternetAddress(fromAddr));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toAddr));
message.setSubject(subject);
message.setText(body);
Transport.send(message, user, pass);
}
catch (AddressException e) {e.printStackTrace();}
catch (MessagingException e) {e.printStackTrace();}
}