使用JavaMail API发送电子邮件Android

时间:2018-04-12 01:51:18

标签: android javamail

我正在尝试直接点击按钮发送邮件而不使用此应用程序。实际上我复制了这个Code from Vinayak Bevinakatti。我遵循他的代码,但没有工作,我认为我有一个SDK VERSION的问题。

Build.app

android {
compileSdkVersion 26
defaultConfig {
    applicationId "com.example.coorsdev.sendsms"
    minSdkVersion 14
    targetSdkVersion 26
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'}

2 个答案:

答案 0 :(得分:1)

我建议这很酷library。这是非常简单的继承人如何只是改变链接,将其编译到你的项目

//Manifest
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>

//Project gradle
repositories {
    // ...
    maven { url "https://jitpack.io" }
}

//Module gradle
compile 'com.github.yesidlazaro:GmailBackground:1.2.0'

然后使用你只需要在你的OnClick上创建一个实例

BackgroundMail.newBuilder(this)
            .withUsername("username@gmail.com")
            .withPassword("password12345")
            .withMailto("toemail@gmail.com")
            .withType(BackgroundMail.TYPE_PLAIN)
            .withSubject("this is the subject")
            .withBody("this is the body")
            .withOnSuccessCallback(new BackgroundMail.OnSuccessCallback() {
                @Override
                public void onSuccess() {
                    //do some magic
                }
            })
            .withOnFailCallback(new BackgroundMail.OnFailCallback() {
                @Override
                public void onFail() {
                    //do some magic
                }
            })
            .send();

注意:您可以使用

在后台发送
.withProcessVisibility(false)

希望这有帮助。

答案 1 :(得分:1)

通过JavaX Mail API发送邮件

//-----------SEND MAIL ASYNC Task-------------\\
    public class SendMail extends AsyncTask<Void, Void, Void> {

        //Declaring Variables
        private Context context;
        private Session session;

        //Information to send email
        private String email;
        private String subject;
        private String message;

        //ProgressDialog to show while sending email
//        private ProgressDialog progressDialog;
        private ACProgressFlower progressDialog;

        //Class Constructor
        public SendMail(Context context, String email, String subject, String message) {
            //Initializing variables
            this.context = context;
            this.email = email;
            this.subject = subject;
            this.message = message;
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            //Showing progress dialog while sending email
//            progressDialog = ProgressDialog.show(context, "Sending message", "Please wait...", false, false);

        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            //Dismissing the progress dialog
            //progressDialog.dismiss();
            //Showing a success message
            Toast.makeText(context, "Poll emailed", Toast.LENGTH_LONG).show();
        }

        @Override
        protected Void doInBackground(Void... params) {
            //Creating properties
            Properties props = new Properties();

            //Configuring properties for gmail
            //If you are not using gmail you may need to change the values
            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");
            //Creating a new session
            session = Session.getDefaultInstance(props,
                    new javax.mail.Authenticator() {
                        //Authenticating the password
                        protected PasswordAuthentication getPasswordAuthentication() {
                            return new PasswordAuthentication(StaticValues.EMAIL, StaticValues.PASSWORD);
                        }
                    });

            try {
                //Creating MimeMessage object
                MimeMessage mm = new MimeMessage(session);

                //Setting sender address
                mm.setFrom(new InternetAddress(StaticValues.EMAIL));
                //Adding receiver
                mm.addRecipient(Message.RecipientType.TO, new InternetAddress(email));
                //Adding subject
                mm.setSubject(subject);
                //Adding message
                mm.setText(message);

                //Sending email
                Transport.send(mm);

            } catch (MessagingException e) {
                e.printStackTrace();
            }
            return null;
        }
    }

像这样调用这个方法:

//------------------Send Mail using JavaX Mail API----------------------\\
        SendMail sm = new SendMail(this, email, subject, message);
        sm.execute();
//-----------------------------------------------------------------------\\

Gradle Dependencies:

// JavaX Mail \\
compile 'com.sun.mail:android-mail:1.5.5'
compile 'com.sun.mail:android-activation:1.5.5'
//-------------\\

项目级别Gradle

allprojects {
    repositories {
        jcenter()
        maven { url "https://jitpack.io" }
        maven { url "https://s3.amazonaws.com/repo.commonsware.com" }
        maven { url "https://maven.java.net/content/groups/public/" }
    }
}