Created
February 2, 2016 17:07
-
-
Save mirjalal/6a543bf61d59f26850a9 to your computer and use it in GitHub Desktop.
Class for sending mail without using built-in applications in android [working]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.Date; | |
import java.util.Properties; | |
import javax.activation.CommandMap; | |
import javax.activation.DataHandler; | |
import javax.activation.DataSource; | |
import javax.activation.FileDataSource; | |
import javax.activation.MailcapCommandMap; | |
import javax.mail.BodyPart; | |
import javax.mail.MessagingException; | |
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; | |
// IMPORTANT: Use AsyncTask for sending mail !! | |
public class Mail extends javax.mail.Authenticator { | |
private String _user; | |
private String _pass; | |
private String[] _to; | |
private String _from; | |
private String _port; | |
private String _sport; | |
private String _host; | |
private String _subject; | |
private String _body; | |
private boolean _auth; | |
private boolean _debuggable; | |
private Multipart _multipart; | |
public Mail() { | |
_host = "smtp.gmail.com"; // default smtp server | |
_port = "465"; // default smtp port | |
_sport = "465"; // default socketfactory port | |
_user = ""; // username | |
_pass = ""; // password | |
_from = ""; // email sent from | |
_subject = ""; // email subject | |
_body = ""; // email body | |
_debuggable = false; // debug mode on or off - default off | |
_auth = true; // smtp authentication - default on | |
_multipart = new MimeMultipart(); | |
// There is something wrong with MailCap, javamail can not find a handler for the multipart/mixed part, so this bit needs to be added. | |
MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap(); | |
mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html"); | |
mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml"); | |
mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain"); | |
mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed"); | |
mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822"); | |
CommandMap.setDefaultCommandMap(mc); | |
} | |
/** | |
* @param user | |
* Gmail account username (in other words, your mail address) | |
* @param password | |
* Gmail account password | |
*/ | |
public Mail(String user, String password) { | |
this(); | |
_user = user; | |
_pass = password; | |
} | |
/** | |
* @return | |
* true --- if sending operation successfully | |
* @throws | |
* MessagingException | |
*/ | |
public boolean send() throws MessagingException { | |
Properties props = _setProperties(); | |
if (!_user.equals("") && !_pass.equals("") && _to.length > 0 && !_from.equals("") && !_subject.equals("") && !_body.equals("")) | |
{ | |
Session session = Session.getInstance(props, this); | |
MimeMessage msg = new MimeMessage(session); | |
msg.setFrom(new InternetAddress(_from)); | |
InternetAddress[] addressTo = new InternetAddress[_to.length]; | |
for (int i = 0; i < _to.length; i++) | |
addressTo[i] = new InternetAddress(_to[i]); | |
msg.setRecipients(MimeMessage.RecipientType.TO, addressTo); | |
msg.setSubject(_subject); | |
msg.setSentDate(new Date()); | |
// setup message body | |
BodyPart messageBodyPart = new MimeBodyPart(); | |
messageBodyPart.setText(_body); | |
_multipart.addBodyPart(messageBodyPart); | |
msg.setContent(_multipart); | |
Transport.send(msg); | |
return true; | |
} | |
else | |
return false; | |
} | |
public void addAttachment(String filename) throws MessagingException { | |
BodyPart messageBodyPart = new MimeBodyPart(); | |
DataSource source = new FileDataSource(filename); | |
messageBodyPart.setDataHandler(new DataHandler(source)); | |
messageBodyPart.setFileName(filename); | |
_multipart.addBodyPart(messageBodyPart); | |
} | |
public void setTo(String[] toArr) { | |
this._to = toArr; | |
} | |
public void setFrom(String string) { | |
this._from = string; | |
} | |
public void setSubject(String string) { | |
this._subject = string; | |
} | |
public void setBody(String _body) { | |
this._body = _body; | |
} | |
// more of the getters and setters... | |
@Override | |
public PasswordAuthentication getPasswordAuthentication() { | |
return new PasswordAuthentication(_user, _pass); | |
} | |
private Properties _setProperties() { | |
Properties props = new Properties(); | |
props.put("mail.smtp.host", _host); | |
if(_debuggable) | |
props.put("mail.debug", "true"); | |
if(_auth) | |
props.put("mail.smtp.auth", "true"); | |
props.put("mail.smtp.port", _port); | |
props.put("mail.smtp.socketFactory.port", _sport); | |
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); | |
props.put("mail.smtp.socketFactory.fallback", "false"); | |
return props; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment