Hello Friends,
Today, I am sharing another important tutorial. While doing development
some times we came across to this requirement, "Sending emails to users" without
using any built-in mailing app(like: Gmail,Yahoo etc). In that time we normally depends
on web-service, we write a service in PHP or JAVA or .Net and the communicate b/w them.
But, know now no need to depends on web-service we can send the mail directly through
our java code.
This tutorial going to covers following features :
1. Sending email without using any built-in mailing app
2. Sending emails without User Intervention
3. Sending emails to multiple users
4. Sending emails with attachment
5. Sending emails silently without any mail composer
Here are my code:
1. Download java mil.jar, activation.jar and additionnal.jar from below link :
http://code.google.com/p/javamail-android/downloads/list
2. Add this jar files in your project libs folder
3. MainActivity.java
2. Mail.java
Hope this will helps some one.
Enjoy coding... cheers :)
Today, I am sharing another important tutorial. While doing development
some times we came across to this requirement, "Sending emails to users" without
using any built-in mailing app(like: Gmail,Yahoo etc). In that time we normally depends
on web-service, we write a service in PHP or JAVA or .Net and the communicate b/w them.
But, know now no need to depends on web-service we can send the mail directly through
our java code.
This tutorial going to covers following features :
1. Sending email without using any built-in mailing app
2. Sending emails without User Intervention
3. Sending emails to multiple users
4. Sending emails with attachment
5. Sending emails silently without any mail composer
Here are my code:
1. Download java mil.jar, activation.jar and additionnal.jar from below link :
http://code.google.com/p/javamail-android/downloads/list
2. Add this jar files in your project libs folder
3. MainActivity.java
package com.androiddeveloper.solutions.sendemail; import java.io.File; import android.app.Activity; import android.app.ProgressDialog; import android.os.AsyncTask; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.View; import android.widget.ImageButton; import android.widget.Toast; /** * @author: Mukesh Y * @link: http://www.androiddevelopersolutions.com/ */ public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageButton addImage = (ImageButton) findViewById(R.id.action_send_email); addImage.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { new BackGroundAsyncTask().execute(); } }); } public class BackGroundAsyncTask extends AsyncTask{ ProgressDialog prog_synprocess = new ProgressDialog(MainActivity.this); String statusMessage = ""; @Override protected void onPostExecute(String status) { prog_synprocess.hide(); Toast.makeText(MainActivity.this, status, Toast.LENGTH_LONG).show(); } @Override protected void onPreExecute() { prog_synprocess.setCancelable(false); prog_synprocess.setProgressStyle(ProgressDialog.STYLE_SPINNER); prog_synprocess.setMessage("Sending..."); prog_synprocess.show(); } @Override protected String doInBackground(String... arg0) { try { statusMessage = sendLogFile(); } catch (Exception e) { Log.e("Error", e.getMessage()); statusMessage = "Error in updation"; } return statusMessage; } } private String sendLogFile() { String statusMessage = ""; Mail m = new Mail("dataworld.dw@gmail.com", "testtest"); String[] toArr = { "mukesh421985@gmail.com" }; m.setTo(toArr); m.setFrom("dataworld.dw@gmail.com"); String email_subject = "Testing Send mail"; m.setSubject(email_subject); m.setBody("PFA"); try { String pathToMyAttachedFile = Environment .getExternalStorageDirectory() + File.separator + "Project.log"; File file = new File(pathToMyAttachedFile); if (!file.exists() || !file.canRead()) { statusMessage = "File not found"; return statusMessage; } else { m.addAttachment(file.getAbsolutePath()); } if (m.send()) { statusMessage = "Email was sent successfully."; } else { statusMessage = "Email was not sent."; } } catch (Exception e) { // Toast.makeText(MailApp.this, // "There was a problem sending the email.", // Toast.LENGTH_LONG).show(); Log.e("Send Mail", e.getMessage()); statusMessage = "There was a problem sending the email."; } return statusMessage; } }
2. Mail.java
package com.androiddeveloper.solutions.sendemail; import java.util.Date; import java.util.Properties; import javax.activation.CommandMap; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.activation.MailcapCommandMap; import javax.mail.BodyPart; 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; /** * @author: Mukesh Y * @link: http://www.androiddevelopersolutions.com/ */ public class Mail extends javax.mail.Authenticator { private String userName; private String password; private String[] to; private String from; private String portNumber; private String socketPortNumber; private String host; private String emailSubject; private String emailBody; private boolean auth; private boolean debuggable; private Multipart multipart; public Mail() { // default smtp server host = "smtp.gmail.com"; // default smtp port portNumber = "465"; // default socketfactory port socketPortNumber = "465"; // username userName = ""; password = ""; // email sent from from = ""; // email subject emailSubject = ""; // email body emailBody = ""; // debug mode on or off - default off debuggable = false; // smtp authentication - default on auth = true; 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); } public Mail(String user, String pass) { this(); userName = user; password = pass; } public boolean send() throws Exception { Properties props = _setProperties(); if (!userName.equals("") && !password.equals("") && to.length > 0 && !from.equals("") && !emailSubject.equals("") && !emailBody.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(emailSubject); msg.setSentDate(new Date()); // setup message body BodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setText(emailBody); multipart.addBodyPart(messageBodyPart); // Put parts in message msg.setContent(multipart); // send email Transport.send(msg); return true; } else { return false; } } public void addAttachment(String filename) throws Exception { BodyPart messageBodyPart = new MimeBodyPart(); FileDataSource source = new FileDataSource(filename); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(filename); multipart.addBodyPart(messageBodyPart); } @Override public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(userName, password); } 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", portNumber); props.put("mail.smtp.socketFactory.port", socketPortNumber); props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.socketFactory.fallback", "false"); return props; } // the getters and setters public String getBody() { return emailBody; } public void setBody(String _body) { this.emailBody = _body; } // more of the getters and setters ….. public void setTo(String[] toArr) { this.to = toArr; } public void setFrom(String string) { this.from = string; } public void setSubject(String string) { this.emailSubject = string; } }
Hope this will helps some one.
Enjoy coding... cheers :)