简体   繁体   English

如何将附件添加到我的邮件发件人 JavaMail?

[英]How to add attachment to my mail sender JavaMail?

i'm trying to add an attachment button to my mail sender.我正在尝试向我的邮件发件人添加一个附件按钮。 I'm using the libraries JavaMail Mail, activation and additionnal.我正在使用 JavaMail Mail、activation 和 additionalnal 库。 My sender is splited into 3 files :我的发件人分为 3 个文件:

  • MainActivity which allow the user to set the content of the mail ith edit texts允许用户设置邮件内容的MainActivity编辑文本
  • SendMail which allow me to set the sender, and the content from edit texts to the mail and send it SendMail允许我设置发件人,以及从编辑文本到邮件的内容并发送
  • Config which is storing informations like transmitter's address and password and the receiver's address Here is the code of my actual mail sender which send mail properly but without attachment.存储发送者地址和密码以及接收者地址等信息的配置这是我的实际邮件发件人的代码,它可以正确发送邮件但没有附件。

SendMail.java发送邮件.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主活动.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("");

}

}

I got it !我知道了 ! I look at the MimeMessage documentation and found the solution, you just have to change the content inside of the try (in SendMail.java) to this :我查看了 MimeMessage 文档并找到了解决方案,您只需要将 try 中的内容(在 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);

I also changed the names of instances I used.我还更改了我使用的实例的名称。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM