Sending email using telephone interchange

Can someone help in sending email in the background using Phonegap

I did not find any supporting forms for it. Can someone help me on this. Thanks in advance...

+8
cordova
source share
3 answers

you can use the Email Composer plugin, or you can call the smartphone’s own mailbox using the mailto tag:

<a href="mailto:?subject=subject of the email&body=whatever body body" target="_blank">send email</a> 

for more information on mailto options check question

+11
source share

Step 1: add cordova-2.1.0.jar to the project class path

Step 2: add cordova-2.1.0.js to the assets / www / js folder.

Step 3: create a new Java class called EmailComoposer.java

 package com.dinesh.pb; import org.apache.cordova.api.Plugin; import org.apache.cordova.api.PluginResult; import org.apache.cordova.api.PluginResult.Status; import org.json.JSONArray; import org.json.JSONException; import android.annotation.SuppressLint; import android.content.Intent; import android.text.Html; import com.dinesh.pb.utility.Mail; @SuppressLint("ParserError") public class EmailComposer extends Plugin { public final String ACTION_SEND_EMAIL = "sendEmail"; @Override public PluginResult execute(String action, JSONArray arg1, String callbackId) { PluginResult result = new PluginResult(Status.INVALID_ACTION); if (action.equals(ACTION_SEND_EMAIL)) { try { String message = arg1.getString(0); this.sendEmailViaGmail(message); result = new PluginResult(Status.OK); } catch (JSONException ex) { result = new PluginResult(Status.JSON_EXCEPTION, ex.getMessage()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } return result; } private void sendEmailViaGmail(String body) throws Exception{ Mail m = new Mail("From_email_address@gmail.com", "your password"); String[] toArr = {"TO_EMAIL_ADDRESS@gmail.com"}; m.set_to(toArr); m.set_from("FROM_EMAIL_ADDRESS@gmail.com"); m.set_body(body); m.set_subject("TEST SUBJECT"); boolean sendFlag = m.send(); } } 

Step 4. Copy this Mail.java to the package of your choice. My package name is com.dinesh.pb.utility.

 package com.dinesh.pb.utility; 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.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; 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); } public Mail(String user, String pass) { this(); _user = user; _pass = pass; } public boolean send() throws Exception { 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); // 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(); DataSource source = new FileDataSource(filename); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(filename); _multipart.addBodyPart(messageBodyPart); } public String[] get_to() { return _to; } public void set_to(String[] _to) { this._to = _to; } public String get_from() { return _from; } public void set_from(String _from) { this._from = _from; } public String get_body() { return _body; } public void set_body(String _body) { this._body = _body; } @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; } public String get_subject() { return _subject; } public void set_subject(String _subject) { this._subject = _subject; } // more of the getters and setters ….. } 

Step 5: Update the config.xml file and add information about the new EmailComposer.java plugin class. Mine looks like this. Update the package name value = "com.dinesh.pb.EmailComposer" from your package path.

 <?xml version="1.0" encoding="utf-8"?> <cordova> <access origin="http://127.0.0.1*"/> <!-- allow local pages --> <access origin=".*"/> <log level="DEBUG"/> <preference name="useBrowserHistory" value="false" /> <preference name="exit-on-suspend" value="false" /> <plugins> <plugin name="App" value="org.apache.cordova.App"/> <plugin name="Geolocation" value="org.apache.cordova.GeoBroker"/> <plugin name="Device" value="org.apache.cordova.Device"/> <plugin name="Accelerometer" value="org.apache.cordova.AccelListener"/> <plugin name="Compass" value="org.apache.cordova.CompassListener"/> <plugin name="Media" value="org.apache.cordova.AudioHandler"/> <plugin name="Camera" value="org.apache.cordova.CameraLauncher"/> <plugin name="Contacts" value="org.apache.cordova.ContactManager"/> <plugin name="File" value="org.apache.cordova.FileUtils"/> <plugin name="NetworkStatus" value="org.apache.cordova.NetworkManager"/> <plugin name="Notification" value="org.apache.cordova.Notification"/> <plugin name="Storage" value="org.apache.cordova.Storage"/> <plugin name="Temperature" value="org.apache.cordova.TempListener"/> <plugin name="FileTransfer" value="org.apache.cordova.FileTransfer"/> <plugin name="Capture" value="org.apache.cordova.Capture"/> <plugin name="Battery" value="org.apache.cordova.BatteryListener"/> <plugin name="SplashScreen" value="org.apache.cordova.SplashScreen"/> <plugin name="Echo" value="org.apache.cordova.Echo" /> <plugin name="EmailComposer" value="com.dinesh.pb.EmailComposer"/> </plugins> </cordova> 

Step 6: Create a new javascript file named email.js

 var EmailComposer = function(){}; /* cordova.addConstructor(function() { cordova.addPlugin("emailcomposer", new EmailComposer()); }); */ EmailComposer.prototype.send = function (message){ console.log("Calling the send message"); cordova.exec(function(){ alert('feedback sent')}, function(){ alert('feedback was not sent')}, 'EmailComposer', 'sendEmail', [message]); } function sendFeedback(){ window.EmailComposer.prototype.send("My message body"); } 

Now that I mentioned earlier that I am using the cordova-2.1.0.js / jar file, there are subtle differences between the latest version and the older version (cordova-1.9.0). If you are using an older version you need to uncomment the cordova.addConstructorabove section and instead of calling

 window.EmailComposer.prototype.send("My message body"); Use this: window.plugins.emailComposer.prototype.send(body); 

If you are not using it, you may get an error that says window.plugins is not defined. If you encounter such problems, use firebug and see what variables are defined in the variable "window".

Pay attention to the "Feedback ()" method. I simply pass the user text as the body of the message, capturing the input from the TextBox user. For simplicity, I just inserted the default email body.

Step 7: Include js file in index.html file

 // <!–[CDATA[ javascript" src="js/email.js"> // ]]> 

Step 8: Include the cordova js file in index.html

 // <!–[CDATA[ javascript" src="js/cordova-2.1.0.js"> // ]]> 

Step 9: add three jar files for the Java mail api - namely Activation.jar, Mail.jar and Additional.jar to the libs folder and add them to the class path. You can use these files.

Hooray!!

+8
source share
+2
source share

All Articles