Android – 使用JavaMail和OAuth2发送电子邮件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Android – 使用JavaMail和OAuth2发送电子邮件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4226字,纯文字阅读大概需要7分钟。
内容图文
![Android – 使用JavaMail和OAuth2发送电子邮件](/upload/InfoBanner/zyjiaocheng/787/65b3ff771a474b7ebfbdbc60ebe526a4.jpg)
我正在开发一个基本的电子邮件发件人应用,只向Gmail发送电子邮件.过了一段时间,我想出了Google现在需要使用GoogleAuthUtil API中的getToken()方法进行身份验证的OAuth2的漏洞方案.
我在网上搜索了JavaMail代码,使用我从API检索的令牌发送电子邮件,我找到了以下我现在使用的代码:
package com.provider;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.Provider;
import java.security.Security;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.URLName;
import javax.mail.Message;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.util.ByteArrayDataSource;
import android.util.Log;
import com.sun.mail.smtp.SMTPTransport;
import com.sun.mail.util.BASE64EncoderStream;
public class GMailOauthSender {
private Session session;
private String mailhost = "smtp.gmail.com";
private int port = 587;
private String user;
private String password;
public SMTPTransport connectToSmtp(String host, int port, String userEmail,
String oauthToken, boolean debug) throws Exception {
Properties props = new Properties();
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.starttls.required", "true");
props.put("mail.smtp.sasl.enable", "true");
props.put("mail.smtp.auth", "true");
props.put("mail.imap.auth.login.disable", "true");
props.put("mail.imap.auth.plain.disable", "true");
session = Session.getInstance(props);
session.setDebug(debug);
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(host, port, userEmail, emptyPassword);
byte[] response = String.format("user=%s\1auth=Bearer %s\1\1", userEmail,
oauthToken).getBytes();
response = BASE64EncoderStream.encode(response);
transport.issueCommand("AUTH XOAUTH2 " + new String(response),
235);
return transport;
}
public synchronized void sendMail(String subject, String body, String user,
String oauthToken, String recipients) {
try {
SMTPTransport smtpTransport = connectToSmtp("smtp.gmail.com",
587,
user,
oauthToken,
true);
MimeMessage message = new MimeMessage(session);
DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/plain"));
message.setSender(new InternetAddress(user));
message.setSubject(subject);
message.setDataHandler(handler);
if (recipients.indexOf(',') > 0)
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
else
message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
smtpTransport.sendMessage(message, message.getAllRecipients());
} catch (Exception e) {
//Log.d("test", e.getMessage());
}
}
不幸的是,代码根本不起作用.到目前为止,我已经坚持了三个多星期.有什么建议?
解决方法:
当我第一次这样做并使其工作时真的很痛苦.遵循这些步骤
首先,您需要在开发人员控制台中为您的应用设置OAuth2,有关详细信息,请转到此link
现在您需要添加这4个文件,这些将有助于在后台发送邮件.当用户打开应用程序时,将向用户显示同意屏幕(文件AUthActivity.java中的代码),并且必须允许该应用程序使用gmail,这是一次性活动,以后不再需要.执行此操作时,用户从Google服务器请求令牌,并将保存在首选项中,以便不再询问用户(AuthPreferences.java).用户批准后,您可以使用以下方式发送邮件:
GMailSender gMailSender = new GMailSender();
gMailSender.sendMail("hi", "hi", authPreferences.getUser(), authPreferences.getToken(), "somemailid@gmail.com");
github:https://gist.github.com/ranjithnair02/1c6dab7dec51971abfec中文件的链接
您还需要将以下jar文件添加到项目中:
http://javamail-android.googlecode.com/files/mail.jar
http://javamail-android.googlecode.com/files/activation.jar
http://javamail-android.googlecode.com/files/additionnal.jar
您还需要在Androidmanifest.xml中添加以下内容
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
内容总结
以上是互联网集市为您收集整理的Android – 使用JavaMail和OAuth2发送电子邮件全部内容,希望文章能够帮你解决Android – 使用JavaMail和OAuth2发送电子邮件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。