Uygulamamın öncelikle bir String olarak oluşturması gereken bir textfile göndermesi gerekiyor. Metin ASCII olmayan semboller içerir, bu yüzden UTF-8 olmasını isterim. Çok fazla varyant denedim, ancak ek olarak aldığım her şey bazı soru işaretleri. Ve mesaj metni ile aynı metni gönderdiğimde, her şey yolunda. İşte JavaMail dize kodlamasından posta eki gönderme UTF-8
eki ile MimeBodyPart üretir kod satırına: Ben de gördüğünüz gibi, ben çalışıyorum, şimdi, sadece bayt kullanarak, herhangi bir dönüşüm olmadan dize kullanarak çalıştıString attachment = "Привет";
messageBodyPart.setContent(new String(attachment.getBytes("UTF-8"),
"UTF-8"),"text/plain; charset=UTF-8");
bayttan bir dize oluştur ...
Neyi yanlış yapıyorum? (Ve bunu başka bir projede yaptığımı hatırlıyorum, bu işe yarıyor ama artık kaynak koduna erişemiyorum).
Önceden teşekkür ederiz. Timofey.
GÜNCELLEME cevaplarınızı okumak, ve deney biraz daha başarısız sonra benim posta şey kodunu yayımlamak için en iyisi düşündük. Posta gönderen Mailer
sınıfına sahibim ve diğer sınıflar yalnızca bir ileti göndermek için statik sendMessage()
yöntemini çağırabilir. Ve hepsi Google App Engine'de çalışır.
public static void sendMessage(String to, String subject, String msgBody, String attachment) throws AddressException, MessagingException { Properties props = new Properties(); Session mailSession = Session.getDefaultInstance(props, null); Message msg = new MimeMessage(mailSession); String email = "bla-bla-bla"; // userService.getCurrentUser().getEmail(); msg.setFrom(new InternetAddress(email)); msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); InternetAddress[] addresses = { new InternetAddress("bla-bla-bla") }; msg.setReplyTo(addresses); msg.setSubject(subject); Calendar cal = Calendar.getInstance(); String fileName = cal.get(Calendar.YEAR) + "_" + cal.get(Calendar.MONTH) + "_" + cal.get(Calendar.DAY_OF_MONTH) + "_" + cal.get(Calendar.HOUR_OF_DAY) + "_" + cal.get(Calendar.MINUTE) + "_" + cal.get(Calendar.SECOND) + "_" + cal.get(Calendar.MILLISECOND) + ".txt"; // create the message part MimeBodyPart messageBodyPart = new MimeBodyPart(); // fill message // Here we should have the msgBody. // Sending attachment contents for debugging only. messageBodyPart.setText(attachment + " - 4", "UTF-8", "plain"); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart); MimeBodyPart att = new MimeBodyPart(); att.setText(attachment, "UTF-8", "plain"); att.addHeader("Content-Type", "text/plain; charset=UTF-8"); att.setFileName(fileName); multipart.addBodyPart(att); // Put parts in message msg.setContent(multipart); Transport.send(msg); }
Ve başka bir sınıfta bu şeyi çağırır hat
geçerli:Mailer.sendMessage("[email protected]", "Test", "No body", "Привет, Я кусок текста");
Ve postanın ham kaynağı, garip, (görünüşte alakasız başlıklarını dışarıda bırakarak) olduğu:
Message-ID: <[email protected]>
Date: Sat, 12 Feb 2011 11:21:01 +0000
Subject: Pages
From: [email protected]
To: [email protected]
Content-Type: multipart/mixed; boundary=00163662e7107ccbd4049c1402fa
--00163662e7107ccbd4049c1402fa
Content-Type: text/plain; charset=KOI8-R; format=flowed; delsp=yes
Content-Transfer-Encoding: base64
8NLJ18XULCDxIMvV08/LINTFy9PUwSAtIDQNCg==
--00163662e7107ccbd4049c1402fa
Content-Type: text/plain; charset=US-ASCII; name="2011_1_12_11_21_1_691.txt"
Content-Disposition: attachment; filename="2011_1_12_11_21_1_691.txt"
Content-Transfer-Encoding: base64
Pz8/Pz8/LCA/ID8/Pz8/ID8/Pz8/Pw==
--00163662e7107ccbd4049c1402fa--
Sadece anlamıyorum, neden kestirmeye çalıştığımdan farklıdır ve nereden geldikleri.
String attachment = "Привет";
DataSource ds = new ByteArrayDataSource(attachment, "text/plain; charset=UTF-8");
messageBodyPart.setDataHandler(new DataHandler(ds));
GÜNCELLEME:
dosyada doğru karakter kodlamasını görüyor musunuz siz yarattı? – JSS
Hayır. Oluşturulan dosyada sadece soru işaretlerini görüyorum. – Ibolit