Java说邮件已经发送了,但实际上还没有
我试图通过java发送邮件,但它不起作用。这也没有显示出任何错误。我是javamail新手,所以请帮助:)我到处搜索这个问题,但我只能在php中找到这个问题。所以请让我知道如何用java调试它Java说邮件已经发送了,但实际上还没有,java,jakarta-mail,Java,Jakarta Mail,我试图通过java发送邮件,但它不起作用。这也没有显示出任何错误。我是javamail新手,所以请帮助:)我到处搜索这个问题,但我只能在php中找到这个问题。所以请让我知道如何用java调试它 public void sendMail(){ String host = "smtp.gmail.com"; String user = "tharumudu@gmail.com"; String password = "pass"; S
public void sendMail(){
String host = "smtp.gmail.com";
String user = "tharumudu@gmail.com";
String password = "pass";
String to = "tharumudu@gmail.com";
String from = "tharumudu@gmail.com";
String subject = "Subject";
String messageText = "Thada ! ";
boolean sessionBug = false;
Properties properties = System.getProperties();
properties.put("mail.smtp.starttls.enable","true");
properties.put("mail.smtp.host", host);
properties.put("mail.smtp.port", "587");
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.required","true");
properties.put("mail.smtp.ssl.trust", "smtp.gmail.com");
Session session = Session.getDefaultInstance(properties, null);
session.setDebug(sessionBug);
Message msg = new MimeMessage(session);
try {
msg.setFrom(new InternetAddress(from));
InternetAddress address = new InternetAddress(to);
msg.setRecipient(Message.RecipientType.TO, address);
msg.setSubject(subject);
msg.setSentDate(new Date());
msg.setText(messageText);
Transport transport = session.getTransport("smtp");
transport.connect(host, user, password);
transport.close();
System.out.println("email sent successfully");
} catch (MessagingException e) {
System.err.println(e);
}
}
我在这里调用了这个方法
public void sendButtonClicked(ActionEvent actionEvent) {
sendMail();
}
代码中没有对或的调用<代码>发送是实际发送电子邮件的内容。您所做的只是创建一条消息并连接。连接后,发送。您的代码中没有对或的调用<代码>发送是实际发送电子邮件的内容。您所做的只是创建一条消息并连接。连接后,发送。您必须致电
send
或sendMessage
发送电子邮件。所以你的代码如下
Transport transport = session.getTransport("smtp");
transport.connect(host, user, password);
transport.close();
可以替换为
Transport.send(msg);
用户名和密码已通过您的会话属性提供。您必须呼叫
发送
或发送邮件
。所以你的代码如下
Transport transport = session.getTransport("smtp");
transport.connect(host, user, password);
transport.close();
可以替换为
Transport.send(msg);
用户名和密码已通过会话属性提供。仅仅因为您打印了某种成功消息,并不意味着电子邮件已成功发送。您错过了对
send
的呼叫。请告诉我如何呼叫@glains仅仅因为您打印了某种成功消息并不意味着电子邮件已成功发送。你错过了一个呼叫send
。请告诉我如何呼叫@glains。你能告诉我如何呼叫吗@你能告诉我怎么称呼它吗@T.JCrowder@T.JCrowder已经回答了这个问题,但OP要求提供一个例子。很好,很高兴你能成功。请考虑接受T.JCuldor或我的ANSER标记。上述代码是错误的。您应该使用该方法,例如,transport.sendMessage(msg,msg.getAllRecipients())
,或者用对静态方法的调用替换上述所有代码,例如,Transport.send(msg、user、password)代码>@BillShannon你怎么会这么想?应按预期工作。send是一种静态方法。在实例变量上调用它没有意义,因为它会忽略实例变量。请看。@T.J Crowder已经回答了这个问题,但OP要求提供一个例子。很好,很高兴你能成功。请考虑接受T.JCuldor或我的ANSER标记。上述代码是错误的。您应该使用该方法,例如,transport.sendMessage(msg,msg.getAllRecipients())
,或者用对静态方法的调用替换上述所有代码,例如,Transport.send(msg、user、password)代码>@BillShannon你怎么会这么想?应按预期工作。send是一种静态方法。在实例变量上调用它没有意义,因为它会忽略实例变量。看。