2017-05-29 1 views
0

J'ai ces deux fichiers qui permettent d'envoyer un e-mail en arrière-plan d'une application Android. Comment puis-je modifier le code existant pour ajouter et envoyer une pièce jointe? La pièce jointe serait simplement un fichier .txt standard.Ajout d'une pièce jointe txt à un e-mail sortant dans un projet Android

import android.util.Log; 
import java.io.UnsupportedEncodingException; 
import java.util.List; 
import java.util.Properties; 
import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.AddressException; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 



public class GMail { 

final String emailPort = "587";// gmail's smtp port 
final String smtpAuth = "true"; 
final String starttls = "true"; 
final String emailHost = "smtp.gmail.com"; 


String fromEmail; 
String fromPassword; 
List<String> toEmailList; 
String emailSubject; 
String emailBody; 

Properties emailProperties; 
Session mailSession; 
MimeMessage emailMessage; 

public GMail() { 

} 

public GMail(String fromEmail, String fromPassword, 
      List<String> toEmailList, String emailSubject, String 
emailBody) { 
    this.fromEmail = fromEmail; 
    this.fromPassword = fromPassword; 
    this.toEmailList = toEmailList; 
    this.emailSubject = emailSubject; 
    this.emailBody = emailBody; 

    emailProperties = System.getProperties(); 
    emailProperties.put("mail.smtp.port", emailPort); 
    emailProperties.put("mail.smtp.auth", smtpAuth); 
    emailProperties.put("mail.smtp.starttls.enable", starttls); 
    Log.i("GMail", "Mail server properties set."); 
} 

public MimeMessage createEmailMessage() throws AddressException, 
     MessagingException, UnsupportedEncodingException { 

    mailSession = Session.getDefaultInstance(emailProperties, null); 
    emailMessage = new MimeMessage(mailSession); 

    emailMessage.setFrom(new InternetAddress(fromEmail, fromEmail)); 
    for (String toEmail : toEmailList) { 
     Log.i("GMail", "toEmail: " + toEmail); 
     emailMessage.addRecipient(Message.RecipientType.TO, 
       new InternetAddress(toEmail)); 
    } 

    emailMessage.setSubject(emailSubject); 
    emailMessage.setContent(emailBody, "text/html");// for a html email 
    // emailMessage.setText(emailBody);// for a text email 
    Log.i("GMail", "Email Message created."); 
    return emailMessage; 
} 

public void sendEmail() throws AddressException, MessagingException { 

    Transport transport = mailSession.getTransport("smtp"); 
    transport.connect(emailHost, fromEmail, fromPassword); 
    Log.i("GMail", "allrecipients: " + emailMessage.getAllRecipients()); 
    transport.sendMessage(emailMessage, emailMessage.getAllRecipients()); 
    transport.close(); 
    Log.i("GMail", "Email sent successfully."); 
} 

} 

Et

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.os.AsyncTask; 
import android.util.Log; 
import java.util.ArrayList; 
import java.util.List; 


public class SendMailTask extends AsyncTask { 

private ProgressDialog statusDialog; 
private Activity sendMailActivity; 

public SendMailTask(Activity activity) { 
    sendMailActivity = activity; 

} 


protected void onPreExecute() { 
    statusDialog = new ProgressDialog(sendMailActivity); 
    statusDialog.setMessage("Getting ready..."); 
    statusDialog.setIndeterminate(false); 
    statusDialog.setCancelable(false); 
    statusDialog.show(); 
} 

@Override 
protected Object doInBackground(Object... args) { 
    String senderEmail = "[email protected]"; // XXXXXXXXXX 
    String senderPassword = "XXXXXX"; // XXXXXXXXX 
    String subject = args[0].toString(); 
    String body = args[1].toString(); 
    List emailRecipients = new ArrayList(); 
    emailRecipients.add("[email protected]"); 

    try { 
     Log.i("SendMailTask", "About to instantiate GMail..."); 
     publishProgress("Processing input...."); 

     GMail gMail = new GMail(
       senderEmail, 
       senderPassword, 
       emailRecipients, 
       subject, 
       body); 

     publishProgress("Preparing mail message...."); 
     gMail.createEmailMessage(); 
     publishProgress("Sending email...."); 
     gMail.sendEmail(); 
     publishProgress("Email Sent."); 
     Log.i("SendMailTask", "Mail Sent."); 
    } catch (Exception e) { 
     publishProgress(e.getMessage()); 
     Log.e("SendMailTask", e.getMessage(), e); 
    } 
    return null; 
} 

@Override 
public void onProgressUpdate(Object... values) { 
    statusDialog.setMessage(values[0].toString()); 

} 

@Override 
public void onPostExecute(Object result) { 
    statusDialog.dismiss(); 
} 

} 

Répondre

0

j'ai tout compris, voir la méthode modifiée ci-dessous. À votre santé!

public GMail(String fromEmail, String fromPassword, 
      List<String> toEmailList, String emailSubject, String emailBody, List<String> attachmentFileNames) throws MessagingException { 
    this.fromEmail = fromEmail; 
    this.fromPassword = fromPassword; 
    this.toEmailList = toEmailList; 
    this.emailSubject = emailSubject; 
    this.emailBody = emailBody; 

    emailProperties = System.getProperties(); 
    emailProperties.put("mail.smtp.port", emailPort); 
    emailProperties.put("mail.smtp.auth", smtpAuth); 
    emailProperties.put("mail.smtp.starttls.enable", starttls); 
    Log.i("GMail", "Mail server properties set."); 

    if (attachmentFileNames != null && !attachmentFileNames.isEmpty()) { 
     for (String filename : attachmentFileNames) { 
      MimeBodyPart messageBodyPart = new MimeBodyPart(); 
      DataSource source = new FileDataSource(filename); 
      messageBodyPart.setDataHandler(new DataHandler(source)); 
      messageBodyPart.setFileName(filename); 

      attachments.add(messageBodyPart); 
     } 
    } 
} 

public MimeMessage createEmailMessage() throws AddressException, 
     MessagingException, UnsupportedEncodingException { 

    mailSession = Session.getDefaultInstance(emailProperties, null); 
    emailMessage = new MimeMessage(mailSession); 

    emailMessage.setFrom(new InternetAddress(fromEmail, fromEmail)); 
    for (String toEmail : toEmailList) { 
     Log.i("GMail", "toEmail: " + toEmail); 
     emailMessage.addRecipient(Message.RecipientType.TO, 
       new InternetAddress(toEmail)); 
    } 

    emailMessage.setSubject(emailSubject); 

    if (attachments.size() > 0) { 
     // Create the message part 
     BodyPart messageBodyPart = new MimeBodyPart(); 

     // Now set the actual message 
     messageBodyPart.setContent(emailBody, "text/html"); 

     // Create a multipart message 
     Multipart multipart = new MimeMultipart(); 

     // Set text message part 
     multipart.addBodyPart(messageBodyPart); 

     // attachments 
     for (MimeBodyPart att : attachments) { 
      multipart.addBodyPart(att); 
     } 

     // Send the complete message parts 
     emailMessage.setContent(multipart); 
    } else { 
     emailMessage.setContent(emailBody, "text/html");// for a html email 
    } 

    // emailMessage.setText(emailBody);// for a text email 
    Log.i("GMail", "Email Message created."); 
    return emailMessage; 
}