2012-12-26 16 views
8

का उपयोग कर ईमेल किसी Phonegapभेजा जा रहा है phonegap

मैं इसके लिए कोई समर्थन रूपों का उपयोग कर पाया है पृष्ठभूमि में ईमेल भेजने में मदद कर सकते हैं। क्या कोई इस मुद्दे में मेरी मदद कर सकता है। अग्रिम धन्यवाद ...

उत्तर

8

चरण 1: परियोजना classpath

चरण 2 में जोड़े कॉर्डोबा-2.1.0.jar: संपत्ति/www/js फ़ोल्डर में कॉर्डोबा-2.1.0.js जोड़ें।

चरण 3: EmailComoposer.java

इस Mail.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("[email protected]", "your password"); 
String[] toArr = {"[email protected]"}; 
m.set_to(toArr); 
m.set_from("[email protected]"); 
m.set_body(body); 
m.set_subject("TEST SUBJECT"); 
boolean sendFlag = m.send(); 

} 

} 

चरण 4. प्रति एक नया जावा वर्ग पैदा करते हैं। मेरा पैकेज नाम 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 ….. 
} 

चरण 5: config.xml अद्यतन करें और नई प्लगइन क्लास EmailComposer.java के बारे में विवरण जोड़ें। मेरा ऐसा दिखता है -। कृपया अपने पैकेज पथ के साथ पैकेज नाम मान = "com.dinesh.pb.EmailComposer" अपडेट करें।

<?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> 

चरण 6: 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"); 
} 

अब कहा जाता है के रूप में मैं पहले ही उल्लेख किया है कि मैं कॉर्डोबा-2.1.0.js/जार फ़ाइल का उपयोग कर रहा है एक नया जावास्क्रिप्ट फ़ाइल बनाएँ वहाँ के बीच सूक्ष्म अंतर कर रहे हैं नवीनतम संस्करण और पुराना संस्करण (कॉर्डोवा-1.9.0)। आप पुराने संस्करण का उपयोग कर रहे हैं आप और बदले

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

कॉल करते समय तो यह उपयोग नहीं करते हैं तो आपको त्रुटि जो कहूँगा कि window.plugins परिभाषित नहीं है मिल सकता है की धारा cordova.addConstructorabove uncomment की आवश्यकता होगी। यदि आप ऐसे मुद्दों में भाग लेते हैं तो फ़ायरबग का उपयोग करें और देखें कि "विंडो" चर के तहत कौन से चर परिभाषित किए गए हैं।

"फीडबैक()" नामक विधि पर ध्यान दें। मैं उपयोगकर्ता प्रतिक्रिया टेक्स्टबॉक्स से इनपुट कैप्चर करके संदेश निकाय के रूप में उपयोगकर्ता पाठ को पास कर रहा हूं। सादगी के लिए मैंने अभी एक डिफ़ॉल्ट ईमेल निकाय चिपकाया है।

चरण 7: अपने index.html फ़ाइल में js फ़ाइल शामिल करें

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

चरण 8: शामिल index.html में कॉर्डोबा js फ़ाइल

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

चरण 9: के लिए तीन जार फ़ाइलें जोड़ें जावा मेल एपीआई - अर्थात्, सक्रियण.जर, Mail.jar और extra.jar libs फ़ोल्डर में और इसे क्लासपाथ में जोड़ें। आप इन फाइलों को यहां कर सकते हैं।

चीयर्स !!

+0

ग्रेट प्रयास मैन की जांच करें। –

11

आप एक प्लगइन Email Composer उपयोग कर सकते हैं, या आप स्मार्ट फोन के देशी mailinbox का उपयोग कर, mailto टैग कॉल कर सकते हैं:

<a href="mailto:?subject=subject of the email&body=whatever body body" target="_blank">send email</a> 
के बारे में अधिक जानकारी के लिए

mailto पैरामीटर इस question

+0

लेकिन फाइल को कैसे संलग्न करें – Prasad

+2

लिंक टूटा हुआ है, इसका उपयोग करें: https://github.com/katzer/cordova-plugin-email-composer या https://github.com/phonegap/phonegap-plugins/tree/DEPRECATED/Android/EmailComposerWithAttachments – cwohlman

संबंधित मुद्दे