Come submit una semplice email in modo programmato? (esiste un modo semplice per farlo?)

Ho un field di text sulla mia app e un button. Voglio solo che quando l'utente premere il button, la mia applicazione deve submit un'e-mail con il text "Ciao" alla direzione del field di text.

C'è un modo semplice per farlo?

  • imansible aprire il file di traccia
  • Il nome host non è stato verificato ANDROID
  • L'errore HAXM ma vt-x è abilitato
  • Effetti indesiderati imprevisti durante l'analisi delle date in Android
  • Come posso triggersre la nuova funzionalità di sincronizzazione Bluetooth A2DP introdotta in Lollipop?
  • Risorsa HTML di Android con riferimenti ad altre risorse
  • Android e & nbsp; in TextView
  • android che cattura screenshot della pagina offscreen
  • Android / NFC: Ottieni Tag in onCreate () senza nuova intenzione
  • Come accedere ad un'image dalla galleria fotografica del telefono?
  • Come fare una bussola precisa su android
  • Quale file devo aggiungere a SVN ignorare in un progetto che utilizza Android Studio
  • 4 Solutions collect form web for “Come submit una semplice email in modo programmato? (esiste un modo semplice per farlo?)”

    Primo modo . Se non si desidera essere collegati al programma di posta elettronica nativo o programma gmail (via intento) per submit la posta, ma submit l'email in background, vedere il codice riportto di seguito.

    Puoi utilizzare questa class di aiuto e adattarla alle tue esigenze.

    package com.myapp.android.model.service; import android.util.Log; import com.myapp.android.MyApp; import java.util.ArrayList; import java.util.Calendar; import java.util.Properties; import javax.activation.DataHandler; import javax.mail.Authenticator; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMultipart; public class MailService { // public static final String MAIL_SERVER = "localhost"; private String toList; private String ccList; private String bccList; private String subject; final private static String SMTP_SERVER = DataService .getSetting(DataService.SETTING_SMTP_SERVER); private String from; private String txtBody; private String htmlBody; private String replyToList; private ArrayList<Attachment> attachments; private boolean authenticationRequired = false; public MailService(String from, String toList, String subject, String txtBody, String htmlBody, Attachment attachment) { this.txtBody = txtBody; this.htmlBody = htmlBody; this.subject = subject; this.from = from; this.toList = toList; this.ccList = null; this.bccList = null; this.replyToList = null; this.authenticationRequired = true; this.attachments = new ArrayList<Attachment>(); if (attachment != null) { this.attachments.add(attachment); } } public MailService(String from, String toList, String subject, String txtBody, String htmlBody, ArrayList<Attachment> attachments) { this.txtBody = txtBody; this.htmlBody = htmlBody; this.subject = subject; this.from = from; this.toList = toList; this.ccList = null; this.bccList = null; this.replyToList = null; this.authenticationRequired = true; this.attachments = attachments == null ? new ArrayList<Attachment>() : attachments; } public void sendAuthenticated() throws AddressException, MessagingException { authenticationRequired = true; send(); } /** * Send an e-mail * * @throws MessagingException * @throws AddressException */ public void send() throws AddressException, MessagingException { Properties props = new Properties(); // set the host smtp address props.put("mail.smtp.host", SMTP_SERVER); props.put("mail.user", from); props.put("mail.smtp.starttls.enable", "true"); // needed for gmail props.put("mail.smtp.auth", "true"); // needed for gmail props.put("mail.smtp.port", "587"); // gmail smtp port /*Authenticator auth = new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("mobile@mydomain.com", "mypassword"); } };*/ Session session; if (authenticationRequired) { Authenticator auth = new SMTPAuthenticator(); props.put("mail.smtp.auth", "true"); session = Session.getDefaultInstance(props, auth); } else { session = Session.getDefaultInstance(props, null); } // get the default session session.setDebug(true); // create message Message msg = new javax.mail.internet.MimeMessage(session); // set from and to address try { msg.setFrom(new InternetAddress(from, from)); msg.setReplyTo(new InternetAddress[]{new InternetAddress(from,from)}); } catch (Exception e) { msg.setFrom(new InternetAddress(from)); msg.setReplyTo(new InternetAddress[]{new InternetAddress(from)}); } // set send date msg.setSentDate(Calendar.getInstance().getTime()); // parse the recipients TO address java.util.StringTokenizer st = new java.util.StringTokenizer(toList, ","); int numberOfRecipients = st.countTokens(); javax.mail.internet.InternetAddress[] addressTo = new javax.mail.internet.InternetAddress[numberOfRecipients]; int i = 0; while (st.hasMoreTokens()) { addressTo[i++] = new javax.mail.internet.InternetAddress(st .nextToken()); } msg.setRecipients(javax.mail.Message.RecipientType.TO, addressTo); // parse the replyTo addresses if (replyToList != null && !"".equals(replyToList)) { st = new java.util.StringTokenizer(replyToList, ","); int numberOfReplyTos = st.countTokens(); javax.mail.internet.InternetAddress[] addressReplyTo = new javax.mail.internet.InternetAddress[numberOfReplyTos]; i = 0; while (st.hasMoreTokens()) { addressReplyTo[i++] = new javax.mail.internet.InternetAddress( st.nextToken()); } msg.setReplyTo(addressReplyTo); } // parse the recipients CC address if (ccList != null && !"".equals(ccList)) { st = new java.util.StringTokenizer(ccList, ","); int numberOfCCRecipients = st.countTokens(); javax.mail.internet.InternetAddress[] addressCC = new javax.mail.internet.InternetAddress[numberOfCCRecipients]; i = 0; while (st.hasMoreTokens()) { addressCC[i++] = new javax.mail.internet.InternetAddress(st .nextToken()); } msg.setRecipients(javax.mail.Message.RecipientType.CC, addressCC); } // parse the recipients BCC address if (bccList != null && !"".equals(bccList)) { st = new java.util.StringTokenizer(bccList, ","); int numberOfBCCRecipients = st.countTokens(); javax.mail.internet.InternetAddress[] addressBCC = new javax.mail.internet.InternetAddress[numberOfBCCRecipients]; i = 0; while (st.hasMoreTokens()) { addressBCC[i++] = new javax.mail.internet.InternetAddress(st .nextToken()); } msg.setRecipients(javax.mail.Message.RecipientType.BCC, addressBCC); } // set header msg.addHeader("X-Mailer", "MyAppMailer"); msg.addHeader("Precedence", "bulk"); // setting the subject and content type msg.setSubject(subject); Multipart mp = new MimeMultipart("related"); // set body message MimeBodyPart bodyMsg = new MimeBodyPart(); bodyMsg.setText(txtBody, "iso-8859-1"); if (attachments.size()>0) htmlBody = htmlBody.replaceAll("#filename#",attachments.get(0).getFilename()); if (htmlBody.indexOf("#header#")>=0) htmlBody = htmlBody.replaceAll("#header#",attachments.get(1).getFilename()); if (htmlBody.indexOf("#footer#")>=0) htmlBody = htmlBody.replaceAll("#footer#",attachments.get(2).getFilename()); bodyMsg.setContent(htmlBody, "text/html"); mp.addBodyPart(bodyMsg); // set attachements if any if (attachments != null && attachments.size() > 0) { for (i = 0; i < attachments.size(); i++) { Attachment a = attachments.get(i); BodyPart att = new MimeBodyPart(); att.setDataHandler(new DataHandler(a.getDataSource())); att.setFileName( a.getFilename() ); att.setHeader("Content-ID", "<" + a.getFilename() + ">"); mp.addBodyPart(att); } } msg.setContent(mp); // send it try { javax.mail.Transport.send(msg); } catch (Exception e) { e.printStackTrace(); } } /** * SimpleAuthenticator is used to do simple authentication when the SMTP * server requires it. */ private static class SMTPAuthenticator extends javax.mail.Authenticator { @Override protected PasswordAuthentication getPasswordAuthentication() { String username = DataService .getSetting(DataService.SETTING_SMTP_USER); String password = DataService .getSetting(DataService.SETTING_SMTP_PASSWORD); return new PasswordAuthentication(username, password); } } public String getToList() { return toList; } public void setToList(String toList) { this.toList = toList; } public String getCcList() { return ccList; } public void setCcList(String ccList) { this.ccList = ccList; } public String getBccList() { return bccList; } public void setBccList(String bccList) { this.bccList = bccList; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public void setFrom(String from) { this.from = from; } public void setTxtBody(String body) { this.txtBody = body; } public void setHtmlBody(String body) { this.htmlBody = body; } public String getReplyToList() { return replyToList; } public void setReplyToList(String replyToList) { this.replyToList = replyToList; } public boolean isAuthenticationRequired() { return authenticationRequired; } public void setAuthenticationRequired(boolean authenticationRequired) { this.authenticationRequired = authenticationRequired; } } 

    E usa questa class:

     MailService mailer = new MailService("from@mydomain.com","to@domain.com","Subject","TextBody", "<b>HtmlBody</b>", (Attachment) null); try { mailer.sendAuthenticated(); } catch (Exception e) { Log.e(AskTingTing.APP, "Failed sending email.", e); } 

    Secondo modo . Un'altra opzione, se non ti dispiace usare il client di posta elettronica nativo o gmail su Android per submit la posta (ma l'utente effettivamente deve colpire il button di invio finalmente nel client di posta elettronica), puoi farlo:

     startActivity(new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:to@gmail.com"))); 

    Aggiungi questa row di codice nel tuo button di invio

      final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); emailIntent.setType("text/plain"); emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String\[\]{ "serveroverloadofficial@gmail.com"}); emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Hello There"); emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Add Message here"); emailIntent.setType("message/rfc822"); try { startActivity(Intent.createChooser(emailIntent, "Send email using...")); } catch (android.content.ActivityNotFoundException ex) { Toast.makeText(getActivity(), "No email clients installed.", Toast.LENGTH_SHORT).show(); } } }); 

    Android sceglierà automaticamente i client avilable nel tuo dispositivo e l'utente sarà libero di scegliere qualsiasi client di posta elettronica che desidera

    Scelta dell'applicazione di intenti

    Supponiamo che l'utente scelga gmail come client di posta elettronica che sarebbe simile a questo: –

    Invia semplicemente la posta

    Il punto più vantaggioso per questo metodo è che non si aggiunge un jar aggiuntivo in App e la libertà di assegnazione di utenti per scegliere l'azione.

      public class MainActivity extends Activity { private static final String username = "emailaddress"; private static final String password = "password"; private EditText emailEdit; private EditText subjectEdit; private EditText messageEdit; private Multipart _multipart; @SuppressLint("SdCardPath") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); emailEdit = (EditText) findViewById(R.id.email); subjectEdit = (EditText) findViewById(R.id.subject); messageEdit = (EditText) findViewById(R.id.message); Button sendButton = (Button) findViewById(R.id.send); sendButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String email = emailEdit.getText().toString(); String subject = subjectEdit.getText().toString(); String message = messageEdit.getText().toString(); sendMail(email, subject, message); } }); } private void sendMail(String email, String subject, String messageBody) { Session session = createSessionObject(); try { Message message = createMessage(email, subject, messageBody, session); new SendMailTask().execute(message); } catch (AddressException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } 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); } private Message createMessage(String email, String subject, String messageBody, Session session) throws MessagingException, UnsupportedEncodingException { Message message = new MimeMessage(session); message.setFrom(new InternetAddress("tutorials@tiemenschut.com", "Tiemen Schut")); message.addRecipient(Message.RecipientType.TO, new InternetAddress(email, email)); message.setSubject(subject); message.setText(messageBody); return message; } private Session createSessionObject() { Properties properties = new Properties(); properties.put("mail.smtp.auth", "true"); properties.put("mail.smtp.starttls.enable", "true"); properties.put("mail.smtp.host", "smtp.gmail.com"); properties.put("mail.smtp.port", "587"); return Session.getInstance(properties, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); } private class SendMailTask extends AsyncTask<Message, Void, Void> { private ProgressDialog progressDialog; @Override protected void onPreExecute() { super.onPreExecute(); progressDialog = ProgressDialog.show(MainActivity.this, "Please wait", "Sending mail", true, false); } @Override protected void onPostExecute(Void aVoid) { super.onPostExecute(aVoid); progressDialog.dismiss(); } @Override protected Void doInBackground(Message... messages) { try { Transport.send(messages[0]); } catch (MessagingException e) { e.printStackTrace(); } return null; } } } 

    aggiungere tre file jar nella cartella libs e provare questo Mail.jar!

    activation.jar!

    additional.jar!

    Scrivere direttamente il text del sobject o del corpo e rimuovere edittext e invierai direttamente l'email dalla tua app.

    E non dimenticare di dare INTERNET PERMISSIONE nel tuo manifesto

    Ancora una cosa, ho usato gli approcci forniti in varie risposte a questo sito, ma semplicemente non functionrebbe. Il primo problema era il firewall: Transport.send(message) lanciato la seguente exception:

      javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465; nested exception is: java.net.SocketTimeoutException: failed to connect to smtp.gmail.com/64.233.184.108 (port 465) after 90000ms 

    Se questo accade allora il tuo firewall vi blocca. Prova una networking diversa.

    Dopo aver commutato la networking ho ricevuto una e-mail da Google che un tentativo è stato fatto da un'applicazione less sicura per utilizzare il mio account.

    La soluzione era quella di consentire l'accesso GMail per applicazioni less sicure. Questo può essere fatto su questo link:

    https://support.google.com/accounts/answer/6010255?hl=en

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.