Javax.Mail Vs Outlook , Unnamedattachments.Dat Sorunu
-
Javax.Mail kullanarak yazdığım ufak bir kod blogu var. Bu blogu kullanarak mail attırıyorum. Sıkıntısız olarak mailler gidiyor. Spama düşme durumu vs yok.
Sorun şurada başlıyor. Gönderdiğim maili outlook uygulaması kullanan birisi açtığında tüm ekler, unnamedAttachment1.dat unnamedAttachment2.dat vs gibi isilendirerek gösteriyor. Aynı maili web uygulaması üzerinden açtığımda( internet explorer kullanarak mail sunucusuna bağlandığımı düşünün) ekler düzgün bir biçimde görünüyor. İnternette araştırdım biraz TNEF paketi düzgün oluşturulmadığı için falan yazmışlar ama java ile nasıl oluşturulur bilemedim. (https://support.microsoft.com/tr-tr/help/278061/email-received-from-a-sender-using-outlook-includes-a-winmail-dat-atta)
daha sonra başka bir konuda exchange üzerinde bir ayardan bahsetmişler ama cpanel de bu ayarı yapacak bir yer bulamadım. (http://msexchangeguru.com/2013/10/09/winmail/)
Sonuç olarak avuçladım kendimi :D
Bu sıkıntıyı nasıl çözeriz, daha önce başına gelen var mı?
-
Hocam kodunu da paylaşır mısın ? Android de böyle birşey yapmıştım daha önce . Bahsettiğin sorun ile hiç karşılaşmadım. Kodlarına bakalım
-
Properties properties = System.getProperties(); properties.setProperty("mail.smtp.host", host); properties.setProperty("mail.smtp.user", from); properties.setProperty("mail.smtp.auth", "true"); properties.setProperty("mail.smtp.port", "25"); SmtpAuthenticator authentication = new SmtpAuthenticator(); // Get the default Session object. Session session = Session.getDefaultInstance(properties, authentication); try { MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(from)); message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); message.setSubject(" Fiyat Teklifi"); BodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setText("Teklif Dosyası Ektedir."); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart); for (ProjeEkliDosya teklifDosyasi : proje.getTeklifDosyalari()) { messageBodyPart = new MimeBodyPart(); String filename = new File(".").getCanonicalPath() + "\\attachmentFiles\\" +teklifDosyasi.getEkAdi(); DataSource source = new FileDataSource(filename) { public String getContentType() { return "application/octet-stream"; } }; messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(ekAdiDuzenle(teklifDosyasi.getEkAdi())); multipart.addBodyPart(messageBodyPart); } // Send the complete message parts message.setContent(multipart ); Transport.send(message); System.out.println("send mail : " + to); }catch (Exception e) { e.printStackTrace(); // loggerService.error(e); } return true;
kod böyle hacı (:
sıkıntı
DataSource source = new FileDataSource(filename) {
public String getContentType() {
return "application/octet-stream";
}
};
şu kısımda bu kısmı text plan vs yapınca outlook da farklı görünüyor. octet stream yemiyor ama bende
-
suraya bakar misin hocam
https://stackoverflow.com/a/20842646
bir de kodunda gördügüm
Multipart multipart = new MimeMultipart();
BodyPart messageBodyPart = new MimeBodyPart();
burda neden MimeMultiPart kullanmamissin Multipart demissin. Aynisi MimeBodyPart icin de gecerli. Bunla ilgili de bir sikinti olabilir belki.
-
unbalanced bunu yazdı
suraya bakar misin hocam
https://stackoverflow.com/a/20842646
bir de kodunda gördügüm
Multipart multipart = new MimeMultipart();
BodyPart messageBodyPart = new MimeBodyPart();
burda neden MimeMultiPart kullanmamissin Multipart demissin. Aynisi MimeBodyPart icin de gecerli. Bunla ilgili de bir sikinti olabilir belki.
Böyle olmasının sorun teşkil etmemesi lazım ama deneyim hemen (: MimeMultiPart Multipart dan extend aynı şekilde MimeBodyPart da BodyParttan
edit. yok abi değişen bir şey olmadı (: tarayıcından açınca http://prntscr.com/gr4b4a görüntü böyle
outlookda böyle http://prntscr.com/gr4bdc
sLeymN tarafından 29/Eyl/17 13:13 tarihinde düzenlenmiştir -
bir kac önerim var hocam o zaman
1- dosya ismini kücült. a.doc gibi bi sey ver (uzunluk ya da türkce karakterden dolayi bu sorunu cikariyor olabilir.
2- bu yemezse encodeparameters i false olarak ayarla https://javaee.github.io/javamail/#mail.mime.encodeparameters
sanirim bu sekilde yapabilmen lazim
java.util.properties props = system.getproperties();
props.setProperty("mail.mime.encodeparameters", "false");
3- farkli outlook versiyonlarindan bakma sansiniz varsa bi de öyle bakin, belki eski versiyonsa sorun yapiyor da olabilir
-
unbalanced bunu yazdı
bir kac önerim var hocam o zaman
1- dosya ismini kücült. a.doc gibi bi sey ver (uzunluk ya da türkce karakterden dolayi bu sorunu cikariyor olabilir.
2- bu yemezse encodeparameters i false olarak ayarla https://javaee.github.io/javamail/#mail.mime.encodeparameters
sanirim bu sekilde yapabilmen lazim
java.util.properties props = system.getproperties();
props.setProperty("mail.mime.encodeparameters", "false");
3- farkli outlook versiyonlarindan bakma sansiniz varsa bi de öyle bakin, belki eski versiyonsa sorun yapiyor da olabilir
hepsini denedim olmadı abi (:
public
String getContentType() {
return
"application/octet-stream"
;
}
şu kısımda "
application/pdf" yapınca pdf dosyaları düzgün oluyor ama diğerleri yemedi :D "application/xlsx" falan denedim olmadı :D -
mime type larla da ilgili olabilir hocam, application/xlsx diye bi sey yok :)
https://github.com/MrSiir/WpfsApp/blob/master/WpfsApp/MIMEAssistant.cs
xls icin application/vnd.ms-excel
xlsx icin application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
doc icin application/msword
docx icin application/vnd.openxmlformats-officedocument.wordprocessingml.document
yaptigim bir ios uygulamasinda path den bana mime type i dönderen fonksiyonu kullanmisim
mailController.AddAttachmentData(NSData.FromFile(path), MimeAssistant.GetMIMEType(path),fileName); java icin ister kendin yukarida verdigim linkteki listeyi kullanirsin istersen buradaki farkli seylerden birini kullanabilirsin
http://www.rgagnon.com/javadetails/java-0487.html
sanirim bu sorununu cözecektir
-
unbalanced bunu yazdı
mime type larla da ilgili olabilir hocam, application/xlsx diye bi sey yok :)
https://github.com/MrSiir/WpfsApp/blob/master/WpfsApp/MIMEAssistant.cs
xls icin application/vnd.ms-excel
xlsx icin application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
doc icin application/msword
docx icin application/vnd.openxmlformats-officedocument.wordprocessingml.document
yaptigim bir ios uygulamasinda path den bana mime type i dönderen fonksiyonu kullanmisim
mailController.AddAttachmentData(NSData.FromFile(path), MimeAssistant.GetMIMEType(path),fileName); java icin ister kendin yukarida verdigim linkteki listeyi kullanirsin istersen buradaki farkli seylerden birini kullanabilirsin
http://www.rgagnon.com/javadetails/java-0487.html
sanirim bu sorununu cözecektir
ya sorunu çözdük diye heveslendim ama yine olmadı abi (:
şuan böyle görünüyor :D
-
surdaki örnegi dener misin hocam
https://github.com/javaee/javamail/blob/master/demo/src/main/java/sendfile.java
adamlar mime type tanimlamasini commentlemis yapmislar.
Ayrica bu java ile ilgili bir bug hocam (daha dogrusu destekleme sorunu)
We have the same problem and found, the following out:
- With Outlook Express 6, Outlook 2007 SP3 and Outlook 2010 the problem occurs, if the
attachment name is longer than 60 bytes, with the JavaMail API 1.5.6! - Also we found out that the exchange-backend can influence the problem as well.
In our actual infrastructure with newest Versions of Microsoft Exchange (server and client), the problem does not occur.
The older Version 1.4.1 is working fine. (Also Tests with 1.4.7 are working).
kindly regards,
Felix
ayrica sana bahsettigim encodeparameters e false verip dene (mail properties inde görmen lazim false oldugunu) bu sekilde de yapabilirsin (mail gönderiminden cok önce) System.setProperty("mail.mime.encodeparameters", "false");
yine olmasa burada yapilan tartismayi bi oku https://community.oracle.com/thread/4052611
en son mesajda eleman kod örnegini eklemis orda degistirmen gereken props.put("mail.mime.encodeparameters", "false"); yerine bunu kullanman System.setProperty("mail.mime.encodeparameters", "false");
umarim bu sefer cözülür sorun. Yeni proje üzerinden deneyebilirsin hocam..
-
sorunu çözdüm abi (:
senin gönderdiğin mimetype dictionary i kullandım (: ayrıca
properties.setProperty("mail.mime.multipart.ignoreexistingboundaryparameter", "true");
properties.setProperty("mail.mime.encodeparameters", "false");
bu iki satırı ekledim. Sıkıntı çözüldü (: Çok teşekkür ettim