How to Send Emails in Android: A Comprehensive Guide

Sending emails programmatically in Android is a powerful feature that allows you to implement functions like automated notifications, feedback forms, or user verification. Send Emails in Android covers the step-by-step process to set up an email sender in your Android app, including resolving common errors like duplicate META-INF files. Let’s dive in!

Why Enable Email Sending in Android Apps?

Integrating email functionality into your app can enhance user engagement and streamline communication. Use cases include:

Automated Notifications: Send important updates directly to your users’ inbox.

Feedback Collection: Allow users to share suggestions or report issues seamlessly.

User Authentication: Implement features like email-based verification or password recovery.

To achieve this, we’ll use JavaMail—a robust library for sending emails in Android.

Prerequisites

Before you begin, ensure you have:

  1. Android Studio installed.
  2. A valid email account (e.g., Gmail, Yahoo, etc.).
  3. An understanding of permissions and Gradle configuration.

Step 1: Add JavaMail Dependency

To use JavaMail in your Android project, include the required dependencies in your build.gradle file.

dependencies {
    implementation 'com.sun.mail:android-mail:1.6.7'
    implementation 'com.sun.mail:android-activation:1.6.7'
}
Groovy

Step 2: Configure ProGuard Rules

If you’re using ProGuard, add the following rules to prevent obfuscation of the JavaMail classes:

-keep class javax.mail.** { *; }
-keep class com.sun.mail.** { *; }
Plaintext

Step 3: Implement Email Sending Logic

Here’s how to implement an email sender:

1. Create a Background Task

Since email sending requires network access, use a Thread or AsyncTask to avoid blocking the UI.

import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;

public class EmailSender {
    public static void sendEmail(String to, String subject, String body) {
        new Thread(() -> {
            try {
                // Set up SMTP server properties
                Properties props = new Properties();
                props.put("mail.smtp.host", "smtp.gmail.com");
                props.put("mail.smtp.port", "587");
                props.put("mail.smtp.auth", "true");
                props.put("mail.smtp.starttls.enable", "true");

                // Authenticate with the email server
                Session session = Session.getInstance(props, new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication("your_email@gmail.com", "your_password");
                    }
                });

                // Compose the email
                Message message = new MimeMessage(session);
                message.setFrom(new InternetAddress("your_email@gmail.com"));
                message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
                message.setSubject(subject);
                message.setText(body);

                // Send the email
                Transport.send(message);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }).start();
    }
}
Java

2. Invoke the Email Sender

Call sendEmail wherever you need to send an email in your app:

EmailSender.sendEmail("recipient@example.com", "Hello!", "This is a test email from my app.");
Java

Step 4: Handle Duplicate META-INF Files Error

When building your app, you might encounter this error:

2 files found with path 'META-INF/NOTICE.md' from inputs...
Java

To resolve it, add the following packagingOptions in your build.gradle:

android {
    packagingOptions {
        exclude 'META-INF/NOTICE.md'
        exclude 'META-INF/LICENSE.md'
    }
}
Java

Step 5: Test the Email Functionality

Run your app and ensure:

  • Emails are being sent successfully.
  • There are no build errors.
  • The email content is delivered as expected.

Common Issues and Solutions

1. Authentication Error

Ensure your email account has:

  • App Passwords enabled for Gmail accounts.
  • Access for less secure apps enabled (if required).

2. Connection Timeout

Check your internet connection and SMTP settings.

3. Build Failures

Resolve duplicate resource errors using the packagingOptions block.

Conclusion

Send Emails in Android is straightforward with JavaMail. This tutorial covered the essential steps to integrate email functionality, resolve common build errors, and optimize performance. Start building smarter, communication-driven apps today!

For more Android development tips, visit Captain Droid.