android - 在android中使用smtp附加文件并发送邮件

标签 android gmail image-file

在我的应用程序中,我使用 smtp 发送邮件。我想将图像文件附加到邮件。我如何附加它?我尝试过。但没有在邮件中获取图像。它给出了小图标。 请帮忙。提前致谢。 下面是邮件代码和邮件图像 -

 public class MailImageFile extends javax.mail.Authenticator {

public MailImageFile(){

}
public void Mail(String user, String pass) {    

    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(USERNAME, PASSWORD);
        }
        });
    try {

        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress(USERNAME));
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(TO));
        message.setSubject("Testing Subject");     
       Multipart multipart = new MimeMultipart();


        MimeBodyPart messageBodyPart = new MimeBodyPart();
        DataSource source = new FileDataSource(new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/wallpaper.jpg"));
        messageBodyPart.setDataHandler(new DataHandler(source));
        messageBodyPart.setFileName("image.png");
        messageBodyPart.setDisposition(MimeBodyPart.ATTACHMENT);
        messageBodyPart.setHeader("Content-ID","<vogue>");
        multipart.addBodyPart(messageBodyPart);

                  message.setContent(multipart);

        Transport.send(message);
    } catch (MessagingException e) {
        throw new RuntimeException(e);
    }           
}   
 }

最佳答案

再考虑一下:

使用javax.mail.util.ByteArrayDataSource:

Multipart multipart = new MimeMultipart();
DataSource source = new ByteArrayDataSource(imageFile, "image/bmp");

// creates body part for the message
MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent("Hi...", "text/html; charset=utf-8");

MimeBodyPart attachPart;
attachPart = new MimeBodyPart();
attachPart .setDataHandler(new DataHandler(source));
attachPart .setFileName(filename);

multipart.addBodyPart(messageBodyPart);
multipart.addBodyPart(attachPart);

message.setContent(multipart);

ByteArrayDataSource的构造函数需要字节数组或 InputStream 作为参数。因此,如果您的位图位于变量 bmp 中,则可以将其获取到 byteArray,如下所示:

ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();

并在 ByteArrayDataSource 中使用它,如下所示:

DataSource source = new ByteArrayDataSource(byteArray, "image/png");

关于android - 在android中使用smtp附加文件并发送邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15548246/

相关文章:

php - 如何在 PHP 中使用 scandir 只获取图像?

java - onclick 弹出窗口出现问题

android - 如何为不同的弹出菜单设置特定的监听器? (里面的代码)

java - 将现有 Flutter Kotlin 项目转换为 Flutter Java 项目

ios - Swift 中的结构问题以及从 url 制作 UIImage 的问题?

android - 在Flutter中-如何传递从url下载的图像

java - 无法安排通知

ruby - 使用 ruby​​ gmail api v0.9 发送电子邮件

google-apps-script - 设置表格格式并通过电子邮件发送

google-apps-script - 一次在 Gmail 线程中搜索多个未读标签的脚本