Проблемы с кодировкой (при отправке почты с сайта)

Модератор: Модераторы разделов

Аватара пользователя
Devider
Сообщения: 476
ОС: GNU/Linux

Проблемы с кодировкой

Сообщение Devider »

Коллеги, нид хелп.
Есть сайт, с которого иногда посылаются уведомления в виде имейл. На ноуте разработчика и на сервере все работало хорошо. После смена железа на серваке и перестановки оси (Debian и был и есть, но с разных дисков ставился) почта стала приходить в неправилной кодировке. Куда рыть? Что могло случиться? Могу привести код, если это поможет.
Спасибо сказали:
Аватара пользователя
newsrc
Сообщения: 314
ОС: Slackware

Re: Проблемы с кодировкой

Сообщение newsrc »

Devider писал(а):
28.10.2009 15:07
Могу привести код, если это поможет.
Приводите.

Какая кодировка была, какая стала?
Система -- это совокупность элементов и связей, дающая новые свойства, не присущие ни одному из элементов и ни одной из связей.
Спасибо сказали:
Аватара пользователя
Devider
Сообщения: 476
ОС: GNU/Linux

Re: Проблемы с кодировкой

Сообщение Devider »

newsrc писал(а):
28.10.2009 15:20
Devider писал(а):
28.10.2009 15:07
Могу привести код, если это поможет.
Приводите.

Какая кодировка была, какая стала?


По умолчанию была, такая же и осталась, сам ничего не менял.
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: Проблемы с кодировкой

Сообщение deadhead »

Devider писал(а):
28.10.2009 15:07
почта стала приходить в неправилной кодировке

Какая кодировка "правильная"? Какой кодировкой отправляете? Какой кодировкой принимате (читай по-умолчанию в почтовом клиенте)?

P.S. Почему вы вообще решили что что-то "могло случится"? С примером, если можно ;-)
[x] close
Спасибо сказали:
Аватара пользователя
Devider
Сообщения: 476
ОС: GNU/Linux

Re: Проблемы с кодировкой

Сообщение Devider »

deadhead писал(а):
28.10.2009 15:44
Devider писал(а):
28.10.2009 15:07
почта стала приходить в неправилной кодировке

Какая кодировка "правильная"? Какой кодировкой отправляете? Какой кодировкой принимате (читай по-умолчанию в почтовом клиенте)?

P.S. Почему вы вообще решили что что-то "могло случится"? С примером, если можно ;-)

Дело было так. После переезда стал тестить сайт, текст в письмах приходил в непонятной кодировке. Прочитать ее не получилось (о балды несколько вариантов выбирал кириллицы и юникод). Почтовый клиент был опера. В общем выяснилось, что на счет локали я наврал - на старом серваке была KOI8-R, на новом UTF-8 (Восмерка видимо меня сбила=) ). Сделал на серваке
dpkg-reconfigure locales
и там снял галочку у UTF-8 и поставил на KOI8-R - стало совсем все плохо, русский язык в вопросах, даже пул коннекшнов к БД в томкате сломался (не выяснял в чем дело), вернул все обратно, поменял в коде

Код: Выделить всё

mbp1.setText(text,"KOI8-R");
на

Код: Выделить всё

mbp1.setText(text,"UTF-8");
сейчас вроде письма доходят как надо. Думаю, что теперь делать. неудобно когда у девелопера и на продакшне код сайта отличается.
Спасибо сказали:
Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: Проблемы с кодировкой

Сообщение deadhead »

[x] close
Спасибо сказали: