(Решено) Как добавить вложение в мой отправитель почты JavaMail? - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь добавить кнопку вложения в мой отправитель почты.Я использую библиотеки JavaMail Mail, активации и дополнения.Мой отправитель разделен на 3 файла:

  • MainActivity , которые позволяют пользователю устанавливать содержимое почты с текстами редактирования
  • SendMail которые позволяют мне установить отправителя и содержимое отредактированных текстов на почту и отправить его
  • Config , в котором хранятся такие данные, как адрес и пароль отправителя и адрес получателя.код моего фактического отправителя почты, который отправляет почту правильно, но без вложения.

SendMail.java

package com.myapp.attch_mail;

import android.annotation.SuppressLint;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.widget.Toast;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;


public class SendMail extends AsyncTask<Void,Void,Void> {

private Context context;

private String subject;
private String message;

private ProgressDialog progressDialog;


SendMail(Context context, String subject, String message){

    this.context = context;
    this.subject = subject;
    this.message = message;

}


@Override
protected void onPreExecute() {
    super.onPreExecute();

    progressDialog = ProgressDialog.show(context,"Envoi en cours","Veuillez patienter...",false,false);
}


@Override
protected void onPostExecute(Void aVoid) {
    super.onPostExecute(aVoid);

    progressDialog.dismiss();

    Toast.makeText(context,"Message sent",Toast.LENGTH_LONG).show();
}


@Override
protected Void doInBackground(Void... params) {

    Properties props = new Properties();


    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.socketFactory.port", "465");
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.port", "465");

    Session session = Session.getDefaultInstance(props,
            new javax.mail.Authenticator() {


                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(Config.EMAIL_SENDER, Config.PASSWORD);
                }
            });

    try {

        MimeMessage mm = new MimeMessage(session);

        mm.setFrom(new InternetAddress(Config.EMAIL_SENDER));

        mm.addRecipient(Message.RecipientType.TO, new InternetAddress(Config.EMAIL_RECEIVER));

        mm.setSubject(subject);

        mm.setText(message);

        Transport.send(mm);

    } catch (MessagingException e) {
        e.printStackTrace();
    }
    return null;
}
}

MainActivity.java


package  com.my_app.attach_mail;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class L3C1 extends AppCompatActivity implements View.OnClickListener {


private EditText objet_siq;
private EditText corps_siq;
private EditText prenom_siq;
private EditText nom_siq;
private EditText telephone_siq;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_l3_c1);


        object = findViewById(R.id.objet_siq);
        body = findViewById(R.id.corps_siq);
        first_name= findViewById(R.id.prenom_siq);
        last_name= findViewById(R.id.nom_siq);
        phone= findViewById(R.id.telephone_siq);


        Button buttonSend = findViewById(R.id.send_mail_siq);
        Button buttonAttachment = findViewById(R.id.add_attachment_siq);


        buttonSend.setOnClickListener(this);
        buttonAttachment.setOnClickListener(this);

}


private void sendEmail() {

    String subject = objet_siq.getText().toString().trim();
    String message = "Nom / Prénom : " + prenom_siq.getText().toString().trim() + " " + nom_siq.getText().toString().trim() + "\n" +"Téléphone : " + telephone_siq.getText().toString().trim() + "\n" + "\n" + "Description du problème : " + "\n" + corps_siq.getText().toString().trim() + "\n" + "\n" + "Cordialement, " +  prenom_siq.getText().toString().trim() + " " +nom_siq.getText().toString().trim();


    SendMail sm_siq = new SendMail(this, subject, message);


    sm_siq.execute();
}


@Override
public void onClick(View view) {
    sendEmail();

    object.setText("");
    body.setText("");
    first_name.setText("");
    last_name.setText("");
    phone.setText("");

}

}

1 Ответ

0 голосов
/ 22 октября 2018

Я понял!Я посмотрел документацию MimeMessage и нашел решение, вам просто нужно изменить содержимое попытки (в SendMail.java) на следующее:

        MimeMessage mimeMessage = new MimeMessage(session);

        MimeMultipart mimeMultipart = new MimeMultipart();


        MimeBodyPart messageBodyPart = new MimeBodyPart();

        messageBodyPart.setContent(message, "text/plain; charset=UTF-8");

        mimeMultipart.addBodyPart(messageBodyPart);



        MimeBodyPart attachmentBodyPart = new MimeBodyPart();

        String filename = "path to your file, exemple : /storage/path.txt" ;
        DataSource source = new FileDataSource(filename);
        attachmentBodyPart.setDataHandler(new DataHandler(source));
        attachmentBodyPart.setFileName(filename);

        mimeMultipart.addBodyPart(attachmentBodyPart);


        mimeMessage.setFrom(new InternetAddress(Config.MAIL_SENDER));

        mimeMessage.addRecipient(Message.RecipientType.TO, new 
        InternetAddress(Config.MAIL_RECEIVER));

        mimeMessage.setSubject(subject);

        mimeMessage.setContent(mimeMultipart);

        Transport.send(mimeMessage);

Я также изменил имена экземпляров, которые использовал.

...