Если вы хотите использовать 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 поможет вам.