无法使用 javax 从 android 使用 gmail 帐户发送电子邮件
cannot send email using gmail account from android using javax
发送电子邮件时出错:
returns 451 4.5.0 SMTP protocol
violation, see RFC 2821
g5sm13340466pfg.0 - gsmtp.
获得 oauth token
后,类型和 oauth 从 gmail
过期。
下面的代码用于测试使用 oauth2
发送电子邮件。
private String GenerateOAuth2String(boolean base64_encode){
String OAuthString = "";
Log.e("SendTestActivity", "AuthToken: " + authToken);
OAuthString = String.format("user=%sauth=Bearer %s", userName, authToken);
Log.e("SendTestActivity", "non base 64: " + OAuthString);
if (base64_encode)
OAuthString = Base64.encodeToString(OAuthString.getBytes(), Base64.DEFAULT);
Log.e("SendTestActivity", "base 64: " + OAuthString);
return OAuthString;
}
private synchronized void sendMail(String subject, String body, String user, String recipients) {
try {
Properties props = new Properties();
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.starttls.required", "true");
props.put("mail.smtp.sasl.enable", "false");
session = Session.getInstance(props);
session.setDebug(true);
final URLName unusedUrlName = null;
SMTPTransport transport = new SMTPTransport(session, unusedUrlName);
// If the password is non-null, SMTP tries to do AUTH LOGIN.
final String emptyPassword = null;
transport.connect("smtp.gmail.com", 587, user, emptyPassword);
transport.issueCommand("AUTH XOAUTH2 " + GenerateOAuth2String(true),
235);
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(user));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
// Set Subject: header field
message.setSubject(subject);
// Now set the actual message
message.setText(body);
if (recipients.indexOf(',') > 0)
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
else
message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
Transport.send(message);
Log.e("SendTestActivity", "email sent");
} catch (Exception e) {
Log.e("SendTestActivity", e.getMessage());
}
}
设置有问题吗?
\1 in user=%sauth=Bearer %s a "string" or a "start of heading" character
你没有提到要求发送邮件,如果是邮寄的表格那么
点击here
或者如果您想使用 php 直接发送,则
<?php
$to = $_POST['to'];
$from = $_POST['from'];
$subject = $_POST['subject'];
$message = "From: ".$name."\r\n";\
$headers = "From:" . $from;
mail($to,$subject,$message,$headers);
?>
您是否尝试过在此处授予权限:
https://www.google.com/settings/security/lesssecureapps
有些类似的错误是因为你没有完整的属性,补充一下:
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.ssl.trust", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
你做得很辛苦。 Let JavaMail do it for you.
发送电子邮件时出错:
returns 451 4.5.0
SMTP protocol
violation, see RFC 2821 g5sm13340466pfg.0 - gsmtp.
获得 oauth token
后,类型和 oauth 从 gmail
过期。
下面的代码用于测试使用 oauth2
发送电子邮件。
private String GenerateOAuth2String(boolean base64_encode){
String OAuthString = "";
Log.e("SendTestActivity", "AuthToken: " + authToken);
OAuthString = String.format("user=%sauth=Bearer %s", userName, authToken);
Log.e("SendTestActivity", "non base 64: " + OAuthString);
if (base64_encode)
OAuthString = Base64.encodeToString(OAuthString.getBytes(), Base64.DEFAULT);
Log.e("SendTestActivity", "base 64: " + OAuthString);
return OAuthString;
}
private synchronized void sendMail(String subject, String body, String user, String recipients) {
try {
Properties props = new Properties();
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.starttls.required", "true");
props.put("mail.smtp.sasl.enable", "false");
session = Session.getInstance(props);
session.setDebug(true);
final URLName unusedUrlName = null;
SMTPTransport transport = new SMTPTransport(session, unusedUrlName);
// If the password is non-null, SMTP tries to do AUTH LOGIN.
final String emptyPassword = null;
transport.connect("smtp.gmail.com", 587, user, emptyPassword);
transport.issueCommand("AUTH XOAUTH2 " + GenerateOAuth2String(true),
235);
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(user));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
// Set Subject: header field
message.setSubject(subject);
// Now set the actual message
message.setText(body);
if (recipients.indexOf(',') > 0)
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
else
message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
Transport.send(message);
Log.e("SendTestActivity", "email sent");
} catch (Exception e) {
Log.e("SendTestActivity", e.getMessage());
}
}
设置有问题吗?
\1 in user=%sauth=Bearer %s a "string" or a "start of heading" character
你没有提到要求发送邮件,如果是邮寄的表格那么
点击here
或者如果您想使用 php 直接发送,则
<?php
$to = $_POST['to'];
$from = $_POST['from'];
$subject = $_POST['subject'];
$message = "From: ".$name."\r\n";\
$headers = "From:" . $from;
mail($to,$subject,$message,$headers);
?>
您是否尝试过在此处授予权限:
https://www.google.com/settings/security/lesssecureapps
有些类似的错误是因为你没有完整的属性,补充一下:
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.ssl.trust", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
你做得很辛苦。 Let JavaMail do it for you.