2012-12-26 19 views

Odpowiedz

8

Krok 1: Dodaj Cordova-2.1.0.jar w ścieżce klasy projektu

Krok 2: Dodaj Cordova-2.1.0.js w folderze aktywów/www/js.

Krok 3: tworzenie nowej klasy Java o nazwie 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("[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(); 

} 

} 

Krok 4. Skopiuj Mail.java w opakowaniu swojego wyboru. Moja nazwa pakietu to 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 ….. 
} 

Krok 5: Zaktualizuj plik config.xml i dodaj szczegóły dotyczące nowej klasy wtyczek EmailComposer.java. Mój wygląda tak -. Zaktualizuj nazwę pakietu o wartości = "com.dinesh.pb.EmailComposer" ze ścieżką pakietu.

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

Krok 6: Utwórz nowy plik JavaScript o nazwie 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"); 
} 

Teraz jak już wspomniano wcześniej, że używam plik Cordova-2.1.0.js/JAR istnieją subtelne różnice między najnowszą wersję i starszą wersję (cordova-1.9.0). Jeśli używasz starszej wersji trzeba odkomentować cordova.addConstructorabove rozdział i zamiast dzwonić

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

Jeśli nie używać go wtedy może pojawić się błąd, który powiedziałby, że window.plugins nie jest zdefiniowana. Jeśli napotkasz takie problemy, użyj firebug i zobacz, jakie zmienne są zdefiniowane w zmiennej "window".

Należy zwrócić uwagę na metodę o nazwie "feedback()". Po prostu przekazuję tekst użytkownika jako treść wiadomości, przechwytując dane wejściowe z opinii użytkownika TextBox. Dla uproszczenia właśnie wkleiłem domyślną treść wiadomości e-mail.

Krok 7: Dołącz plik js w pliku index.html

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

Krok 8: Dołącz plik index.html w Cordova js

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

Krok 9: Dodaj trzy pliki jar dla Java mail api - mianowicie Activation.jar, Mail.jar i Additional.jar w folderze libs i dodaj go do ścieżki klasy. Możesz te pliki tutaj.

Pozdrawiam!

+0

Wielki wysiłek Man. –

11

można użyć wtyczki Email Composer, czy można nazwać rodzimych mailinbox na smartfonie przy użyciu mailto tag:

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

uzyskać więcej informacji o mailto parametry sprawdź ten question

+0

ale jak załączyć plik – Prasad

+2

Link jest uszkodzony, użyj: https://github.com/katzer/cordova-plugin-email-composer lub https://github.com/phonegap/phonegap-plugins/tree/DEPRECATED/Android/EmailComposerWithAttachments – cwohlman

Powiązane problemy