Коллеги, нид хелп.
Есть сайт, с которого иногда посылаются уведомления в виде имейл. На ноуте разработчика и на сервере все работало хорошо. После смена железа на серваке и перестановки оси (Debian и был и есть, но с разных дисков ставился) почта стала приходить в неправилной кодировке. Куда рыть? Что могло случиться? Могу привести код, если это поможет.
Проблемы с кодировкой (при отправке почты с сайта)
Модератор: Модераторы разделов
-
newsrc
- Сообщения: 314
- ОС: Slackware
Re: Проблемы с кодировкой
Приводите.
Какая кодировка была, какая стала?
Система -- это совокупность элементов и связей, дающая новые свойства, не присущие ни одному из элементов и ни одной из связей.
Спасибо сказали:
-
Devider
- Сообщения: 476
- ОС: GNU/Linux
Re: Проблемы с кодировкой
По умолчанию была, такая же и осталась, сам ничего не менял.
echo $LANG
ru_RU.UTF-8
Код: Выделить всё
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Multipart;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMultipart;
public class MailBean {
private static final String login;
private static final String password;
private static final String server;
private static final String from;
private static final String defaultAddress;
private String MSG_SUBJECT_NEWORDER = "Поступил новый заказ";
private String MSG_SUBJECT_ERROR = "Злой ахтунг на сайте";
private String MSG_SUBJECT_CONFIRMATION = "Регистрация на сайте";
static {
java.util.ResourceBundle bundle =
java.util.ResourceBundle.getBundle("mailProps");
login = bundle.getString("server_login");
password = bundle.getString("server_password");
server = bundle.getString("server_smtp");
from = bundle.getString("from_address");
defaultAddress = bundle.getString("to_address");
}
private String SendEmail(String from, String[] to, String subject, String text){
try{
Properties mailProps=new Properties();
mailProps.put("mail.smtp.host",server);
mailProps.put("mail.smtp.auth", "true");
Session mailSession=Session.getInstance(mailProps,new Authenticator(){
@Override
protected PasswordAuthentication getPasswordAuthentication(){
return(new PasswordAuthentication(login,password));
}
});
MimeMessage message=new MimeMessage(mailSession);
message.setFrom(new InternetAddress(from));
String[] emails=to; //адреса получателей
InternetAddress dests[]=new InternetAddress[emails.length];
for(int i=0; i<emails.length; i++){
dests[i]=new InternetAddress(emails[i].trim().toLowerCase());
}
message.setRecipients(Message.RecipientType.TO, dests);
message.setSubject(subject,"KOI8-R");
Multipart mp=new MimeMultipart();
MimeBodyPart mbp1=new MimeBodyPart();
mbp1.setText(text,"KOI8-R");
mp.addBodyPart(mbp1);
message.setContent(mp);
message.setSentDate(new java.util.Date());
MailSender ms = new MailSender(message);
Thread t = new Thread(ms);
t.start();
if (ms.getLastError() == null)
return "Message send!";
else return ms.getLastError().getMessage();
} catch (Exception e) {
return e.getMessage();
}
}
public class MailSender implements Runnable {
MimeMessage message = null;
public MailSender (MimeMessage message){this.message = message;}
private MessagingException lastError = null;
public MessagingException getLastError(){return lastError;}
@Override
public void run(){
try{
Transport.send(message);
}
catch (MessagingException e) {lastError = e;}
}
}
}-
deadhead
- Сообщения: 1913
- Статус: zzz..z
Re: Проблемы с кодировкой
Какая кодировка "правильная"? Какой кодировкой отправляете? Какой кодировкой принимате (читай по-умолчанию в почтовом клиенте)?
P.S. Почему вы вообще решили что что-то "могло случится"? С примером, если можно ;-)
[x] close
-
Devider
- Сообщения: 476
- ОС: GNU/Linux
Re: Проблемы с кодировкой
Дело было так. После переезда стал тестить сайт, текст в письмах приходил в непонятной кодировке. Прочитать ее не получилось (о балды несколько вариантов выбирал кириллицы и юникод). Почтовый клиент был опера. В общем выяснилось, что на счет локали я наврал - на старом серваке была KOI8-R, на новом UTF-8 (Восмерка видимо меня сбила=) ). Сделал на серваке
и там снял галочку у UTF-8 и поставил на KOI8-R - стало совсем все плохо, русский язык в вопросах, даже пул коннекшнов к БД в томкате сломался (не выяснял в чем дело), вернул все обратно, поменял в кодеdpkg-reconfigure locales
Код: Выделить всё
mbp1.setText(text,"KOI8-R");Код: Выделить всё
mbp1.setText(text,"UTF-8");-
deadhead
- Сообщения: 1913
- Статус: zzz..z