Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android – 使用JavaMail和OAuth2发送电子邮件大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个基本的电子邮件发件人应用,只向Gmail发送电子邮件.过了一段时间,我想出了Google现在需要使用GoogleAuthUtil API中的getToken()方法进行身份验证的OAuth2的漏洞方案.

我在网上搜索了@L_624_5@mail代码,使用我从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",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 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发送电子邮件所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。