Как отправить письмо с Android по javax.mail с SMTP - PullRequest
0 голосов
/ 25 сентября 2018

У меня в приложении есть функция отправки электронной почты из приложения по протоколу SMTP.Я хочу, чтобы он отправлял электронную почту в фоновом режиме из приложения, а не как использование Intent для отправки другим почтовым приложением.Я ищу в Google некоторые предложения, связанные с javax.mail.

У меня есть SMTP-сервер с информацией: хост, порт, имя пользователя, пароль.

Как я могу использовать javax.mail для отправки почты через SMTP с html внутри получателю / получателю, и к письму также прикреплены файлы.

Спасибо

1 Ответ

0 голосов
/ 25 сентября 2018

Если вы хотите использовать javax.mail для отправки электронной почты.Вы можете использовать следующий вспомогательный класс для отправки электронной почты.Независимо от того, отправлено ли оно фоновой службой, если оно отправлено AsyncTask.Взгляните на часть конфигурации в приведенном ниже классе.

package com.company.mail.util;

import java.util.Properties;

import javax.activation.DataHandler;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;

public class Mail {
    public static final String EMAIL_LIST_SEPARATOR = ",";

    public boolean sendMail(String[] toEmails, String subject, String msg, boolean isHTML, String charSet, String filename, byte[] attachment) {
    if (toEmails == null || (toEmails != null && toEmails.length == 0))  return false;

    String name = "My Company Name";
    String username = "no-reply@company.com"; 
    String password = "<My Password>"; 
    String host = "smtp.company.com";
    Integer port = 465;
    String from = "no-reply@company.com";

    Properties props = new Properties();
    props.put("mail.smtp.host", host);
    props.put("mail.smtp.socketFactory.port", port.toString());
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.port", port.toString());

    final String fUsername = username;
    final String fPassword = password;
    Session mailSession = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(fUsername, fPassword);
        }
    });
    //mailSession.setDebug(true);

    String recipients = ArrayUtils.toString(toEmails, "");
    Message message = new MimeMessage(mailSession);
    try {
        message.setFrom(new InternetAddress(from, name));
        message.setReplyTo(new InternetAddress[] { new InternetAddress(from, name) });
        message.setSubject(subject);
        message.setContent(msg, isHTML ? "text/html" : "text/plain");

        if (toEmails != null) {
            for (String recipient : toEmails) {
                if (recipient != null && !"".equals(recipient)) {
                    message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
                }
            }

            if (attachment != null) {
                MimeBodyPart messagePart = new MimeBodyPart();
                if (isHTML)
                    messagePart.setContent(msg, "text/html");
                else
                    messagePart.setText(msg);

                MimeBodyPart attachmentPart = new MimeBodyPart();
                attachmentPart.setDataHandler(new DataHandler(attachment, "application/octet-stream"));
                attachmentPart.setFileName(filename);

                Multipart multipart = new MimeMultipart();
                multipart.addBodyPart(messagePart);
                multipart.addBodyPart(attachmentPart);

                message.setContent(multipart);
            }

            Transport.send(message);
            Log.i(" [Mail] Recipient " + name + " <" + username + "> sent e-mail with subject " + subject + " to recipient(s): " + recipients);

            return true;
        }
    } catch (Exception e) {
        Log.e(" [Mail] Error sending " + toEmails.length  + " e-mail(s) with subject '" + subject + "' to recipient(s) (" + recipients + "): " + e.getMessage());
    }

    return false;
    }
}

Вы можете отправить электронное письмо, вызвав метод mail.sendMail(...), например:

Mail mail = new Mail();
mail.sendMail(new String[] { "someone@somewhere.com", "john.doe@mycompany.com" }, "Subject of my e-mail", "This is a message in <b>HTML</b> with <i>italics</i>.", true, "UTF-8", null, null);

Этот класс также поддерживаетчтобы отправить вложение на почту, чтобы вы передали имя файла и массив байтов в качестве двух последних аргументов.

Надеюсь, что этот класс Java поможет вам.

...