2013-03-21 2 views
2

в моем приложении я отправляю почту с помощью smtp.i хочу прикрепить файл изображения к почте. Как я могу его прикрепить? Я попробовал it.but не получать изображение в mail.its давая маленькую икону. пожалуйста, помогите. Спасибо заранее. ниже почтовый код и изображение почты, как это looks-прилагается файл и отправка почты с помощью smtp в android

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); 
    }   
} 
} 

ответ

2

вы можете прикрепить файл как этот

указать путь в том, что п будет прикрепить файл

Отредактировано:

Multipart _multipart; = new MimeMultipart(); 

BodyPart messageBodyPart = new MimeBodyPart(); 

File sdCard =Environment.getExternalStorageDirectory();  

String path=sdCard.getAbsolutePath() + "/AttendanceSystem/MonthlyReport.xls"; 

messageBodyPart.setFileName(path); 

_multipart.addBodyPart(messageBodyPart); 

// Put parts in message 

msg.setContent(_multipart) 

сделайте это согласно вышеописанному способу, который я только что проверил на своем устройстве, его рабочий n прикрепляет chk его enter code here

+0

я использовал свой code.but не работает. 'String path = sdCard.getAbsolutePath() + "xyz.JPEG"; message.setContent («Привет ...» + « "," text/html; charset = utf-8 "); 'но его не работает. –

+0

hey j0k Я только что редактировал ans see it я тестировал его на своем устройстве, его рабочий m тот же человек, которому вы говорили tht m, продвигающий сайт. –

+0

получение исключения во время выполнения., IOExceptions -No content –

1

Попробуйте этот код:

public class Mail extends javax.mail.Authenticator { 
private String _user; 
private String _pass; 

private String[] _to; 
private String _from; 

private String _port; 
private String _sport; 

private String _host; 

private String _subject; 
private String _body; 

private boolean _auth; 

private boolean _debuggable; 

private Multipart _multipart; 


public Mail() { 
    _host = "smtp.gmail.com"; // default smtp server 
    _port = "465"; // default smtp port 
    _sport = "465"; // default socketfactory port 

    _user = ""; // username 
    _pass = ""; // password 
    _from = ""; // email sent from 
    _subject = ""; // email subject 
    _body = ""; // email body 

    _debuggable = false; // debug mode on or off - default off 
    _auth = true; // smtp authentication - default on 

    _multipart = new MimeMultipart(); 

    // There is something wrong with MailCap, javamail can not find a handler for the multipart/mixed part, so this bit needs to be added. 
    MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap(); 
    mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html"); 
    mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml"); 
    mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain"); 
    mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed"); 
    mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822"); 
    CommandMap.setDefaultCommandMap(mc); 
} 

public Mail(String user, String pass) { 
    this(); 

    _user = user; 
    _pass = pass; 
} 

public boolean send() throws Exception { 
    Properties props = _setProperties(); 

    if(!_user.equals("") && !_pass.equals("") && _to.length > 0 && !_from.equals("") && !_subject.equals("") && !_body.equals("")) { 
     Session session = Session.getInstance(props, this); 

     MimeMessage msg = new MimeMessage(session); 

     msg.setFrom(new InternetAddress(_from)); 

     InternetAddress[] addressTo = new InternetAddress[_to.length]; 
     for (int i = 0; i < _to.length; i++) { 
      addressTo[i] = new InternetAddress(_to[i]); 
     } 
     msg.setRecipients(MimeMessage.RecipientType.TO, addressTo); 

     msg.setSubject(_subject); 
     msg.setSentDate(new Date()); 

     // setup message body 
     BodyPart messageBodyPart = new MimeBodyPart(); 
     messageBodyPart.setText(_body); 
     _multipart.addBodyPart(messageBodyPart); 

     // Put parts in message 
     msg.setContent(_multipart); 

     // send email 
     Transport.send(msg); 

     return true; 
    } else { 
     return false; 
    } 
} 

@Override 
public PasswordAuthentication getPasswordAuthentication() { 
    return new PasswordAuthentication(_user, _pass); 
} 

private Properties _setProperties() { 
    Properties props = new Properties(); 

    props.put("mail.smtp.host", _host); 

    if(_debuggable) { 
     props.put("mail.debug", "true"); 
    } 

    if(_auth) { 
     props.put("mail.smtp.auth", "true"); 
    } 

    props.put("mail.smtp.port", _port); 
    props.put("mail.smtp.socketFactory.port", _sport); 
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
    props.put("mail.smtp.socketFactory.fallback", "false"); 

    return props; 
} 

// the getters and setters 
public String getBody() { 
    return _body; 
} 

public void setBody(String _body) { 
    this._body = _body; 
} 

public void setTo(String[] toArr) { 
    this._to = toArr; 
} 

public void setFrom(String string) { 
    this._from = string; 
} 

public void setSubject(String string) { 
    this._subject = string; 
} 

// more of the getters and setters ….. 
} 

И прикрепить файл добавить этот код:

public void addAttachment(String filename) throws Exception { 
    BodyPart messageBodyPart = new MimeBodyPart(); 
    DataSource source = new FileDataSource(filename); 
    messageBodyPart.setDataHandler(new DataHandler(source)); 
    messageBodyPart.setFileName(filename); 

    _multipart.addBodyPart(messageBodyPart); 
} 
+0

Я использовал ваш код вложения в моем коде. но его не работает. Расскажите, пожалуйста, что я должен написать для этого в моем коде? –

+0

@Androiduser я пробовал ваш код его не работает – Erum

2

На второй мысли:

Использование 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 «s конструктораожидает в качестве параметров либо массив байтов, либо InputStream. Так что, если у вас есть Bitmap в переменной ВМР вы получите его в ByteArray, как это:

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

и будет использовать его в ByteArrayDataSource так:

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

вот что такое использование пакета, вы передаете только растровое изображение. И нет никакого метода setData() –

+0

Я тоже пытался, но не работал –

+0

Я знаю, что мне нужно назначить это значение пути. Я не просто копировал и прошёл. –

Смежные вопросы