在googel应用引擎中,如果我们不使用OpenID登录,我们可以发送邮件like its written in API
但是我使用OpenId Login(使用Google邮件)而我无法使用它。
但我会做那样的事情
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
"mail@gmail.com", "pass");
}
});
**Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("mail"));
message.setRecipients(Message.RecipientType.TO,InternetAddress.parse("mail"));
message.setSubject("Testing Subject");
message.setText(msgBody);
Transport.send(message);
如果我将登录然后调用SERVLET,例如www.example.appspot.com/mail它可以工作! 但如果我没有登录,则不会工作! 但我不明白会发生什么?!**
java.lang.RuntimeException: javax.mail.SendFailedException: Send failure (javax.mail.MessagingException: Illegal Arguments (java.lang.IllegalArgumentException: Unauthorized Sender: Unauthorized sender))
at test.queue.MailServlet.sendMail(MailServlet.java:208)
在这208行我有这个:
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("example@gmail.com","pass");
}
答案 0 :(得分:2)
“来自”中设置的地址应出现在“录取”下 - > gae应用程序的权限以及从此许可帐户发送电子邮件的权限,无需在代码中指定密码。
“出于安全考虑,邮件的发件人地址必须是应用程序管理员的电子邮件地址或应用程序的任何有效电子邮件接收地址(请参阅接收邮件)。发件人也可以是Google帐户电子邮件地址登录的当前用户,如果用户的帐户是Gmail帐户,或者是由Google Apps管理的域。“ - 如此处所提到的https://developers.google.com/appengine/docs/java/mail/#Java_Sending_mail_with_the_JavaMail_API