[英]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 个文件:
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;
}
}
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.