问题描述
这段代码有什么问题?不知何故,它在 Transport.send(message); 行进入无限循环,没有错误消息,没有异常,只是可能无限循环(我不知道,因为我不知道等待超过 5-10 分钟)
What is the problem with this code? Somehow it is getting in to an infinity loop at the line Transport.send(message); line, no error message, no exception, just maybe infinite loop (i don't know because i don't wait more than 5-10minute)
final String username = "<mail_name>"; final String password = "<password>"; 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", "465"); Session session = Session.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); try { Message message = new MimeMessage(session); message.setFrom(new InternetAddress("<mail_from>@gmail.com")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("<mail_to>@gmail.com")); message.setSubject("Test Subject"); message.setText("Test"); Transport.send(message); System.out.println("Done"); } catch (MessagingException e) { throw new RuntimeException(e); }
推荐答案
我在这里做一些改变,对我来说很好用:
Here I am giving some changes, that work fine for me:
Session session = Session.getInstance(props,null);
你像你一样实例化消息对象.最后:
You instantiate message object as you did. And finally:
Transport transport = session.getTransport("smtp"); String mfrom = "yourGmailUsernameWithout@"// example laabidiraissi transport.connect("smtp.gmail.com", mfrom, "thepassword"); transport.sendMessage(message, message.getAllRecipients());
编辑,请你帮我一个忙,复制/粘贴并尝试这个示例并显示它显示的内容:
Edit, would you please give me a favor and copy/paste and try this example and show what it displays:
package com.test; import java.util.Properties; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import org.junit.Test; public class EmailService { @Test public void test(){ Properties props = System.getProperties(); props.put("mail.smtp.starttls.enable", true); // added this line props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.user", "username"); props.put("mail.smtp.password", "password"); props.put("mail.smtp.port", "587"); props.put("mail.smtp.auth", true); Session session = Session.getInstance(props,null); MimeMessage message = new MimeMessage(session); System.out.println("Port: "+session.getProperty("mail.smtp.port")); // Create the email addresses involved try { InternetAddress from = new InternetAddress("username"); message.setSubject("Yes we can"); message.setFrom(from); message.addRecipients(Message.RecipientType.TO, InternetAddress.parse("receivermail")); // Create a multi-part to combine the parts Multipart multipart = new MimeMultipart("alternative"); // Create your text message part BodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setText("some text to send"); // Add the text part to the multipart multipart.addBodyPart(messageBodyPart); // Create the html part messageBodyPart = new MimeBodyPart(); String htmlMessage = "Our html text"; messageBodyPart.setContent(htmlMessage, "text/html"); // Add html part to multi part multipart.addBodyPart(messageBodyPart); // Associate multi-part with message message.setContent(multipart); // Send message Transport transport = session.getTransport("smtp"); transport.connect("smtp.gmail.com", "username", "password"); System.out.println("Transport: "+transport.toString()); transport.sendMessage(message, message.getAllRecipients()); } catch (AddressException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MessagingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }