powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему приходят вопросительные знаки?
10 сообщений из 10, страница 1 из 1
Почему приходят вопросительные знаки?
    #39013344
VaneS Ri_lax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, пишу программу которая будет отправлять сообщение на почтовый ящик по SMTP, вот что я написал:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
package smtpsender;

import java.io.IOException;
import java.io.Writer;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.net.smtp.AuthenticatingSMTPClient;
import org.apache.commons.net.smtp.SimpleSMTPHeader;



public class SMTPSender {
    

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        
       
        try {
            AuthenticatingSMTPClient smtpAuth = new AuthenticatingSMTPClient();
            
            smtpAuth.connect("host", 587);
            System.out.println(smtpAuth.getReplyString());
            
            smtpAuth.login("domen.ru");
            System.out.println(smtpAuth.getReplyString());
            
            smtpAuth.auth(AuthenticatingSMTPClient.AUTH_METHOD.LOGIN, "web@domen.ru", "pass");
            System.out.println(smtpAuth.getReplyString());
           
            
            
            smtpAuth.setSender("web@domen.ru");
            System.out.println(smtpAuth.getReplyString());
            
            smtpAuth.addRecipient("ivan@domen.ru");
            System.out.println(smtpAuth.getReplyString());
            
            
            
            Writer writer = smtpAuth.sendMessageData();
            System.out.println(smtpAuth.getReplyString());
            
            SimpleSMTPHeader header = new SimpleSMTPHeader("web@domen.ru", "ivan@domen.ru", "Тестовый заголовок письма");
            
            header.addHeaderField("Content-type", "text/plain; charset=utf-8");
           
            writer.write(header.toString());
            writer.write("Привет, как дела?");
            writer.close();
            smtpAuth.completePendingCommand();
            System.out.println(smtpAuth.getReplyString());
            
            
           
            
            
           
            
        } catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(SMTPSender.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(SMTPSender.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InvalidKeyException ex) {
            Logger.getLogger(SMTPSender.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InvalidKeySpecException ex) {
            Logger.getLogger(SMTPSender.class.getName()).log(Level.SEVERE, null, ex);
        }
            
        
        
        
    }
    
}


Программа письмо пишет, оно приходит, только вместо русских символов появляются вопросительные знаки, в чем может быть проблема?
Заранее большое спасибо!
...
Рейтинг: 0 / 0
Почему приходят вопросительные знаки?
    #39013348
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Компиляция. Файл создаётся в одной кодировке. Компилятор использует другую. Можно посмотреть значения в отладке, если поместить из в переменные.
Утилита native2ascii позволяет конвертировать текст кода в unicode последовательности в виде ASCII, чтобы избежать подобных казусов.

Стоит так же обратить внимание на наличие у SMTP клиента параметра encoding.
...
Рейтинг: 0 / 0
Почему приходят вопросительные знаки?
    #39014116
VaneS Ri_lax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем моя программа работает так,
Клиенты по веб сокетам подключаются к серверу и передают ему адрес получателя, текст сообщения и тему письма. Сервер вызывает статический метод и передает туда эти значения, а тот метод уже подключается к почтовому серверу и отправляет письмо.
Письмо приходит, но вместо русских букв вопросительные знаки, что делать понятия не имею, уже всю голову сломал.
...
Рейтинг: 0 / 0
Почему приходят вопросительные знаки?
    #39014150
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VaneS Ri_laxВ общем моя программа работает так,
Клиенты по веб сокетам подключаются к серверу и передают ему адрес получателя, текст сообщения и тему письма. Сервер вызывает статический метод и передает туда эти значения, а тот метод уже подключается к почтовому серверу и отправляет письмо.
Письмо приходит, но вместо русских букв вопросительные знаки, что делать понятия не имею, уже всю голову сломал.

Проблема в кодировках.
Нужно проверить какие кодировки по всей цепочке передачи данных.
Особое внимание уделить "заголовкам" запросам, в какой кодировке отправляют запрос и в какой кодировке приходит ответ.
Удачи!
...
Рейтинг: 0 / 0
Почему приходят вопросительные знаки?
    #39014162
VaneS Ri_lax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
До сервера приходит нормальная строка, я ее вывожу через
Код: java
1.
System.out.println(message);


Как можно узнать в какой кодировке строка? В нете ничего толкового не нашел.
Я так понимаю кодировка сбивается при передачи именно на почтовый сервер, но как ее там исправить не понятно...
...
Рейтинг: 0 / 0
Почему приходят вопросительные знаки?
    #39014172
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЯ так понимаю кодировка сбивается при передачи именно на почтовый сервер, но как ее там исправить не понятно...

Кодировка не сбивается, а не задаётся.
Или читать документацию по JavaMail API, или найти пристойный программный пример. Тот, с которого передран этот программный код, не годится.
...
Рейтинг: 0 / 0
Почему приходят вопросительные знаки?
    #39014186
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VaneS Ri_laxКак можно узнать в какой кодировке строка?
В этой фразе ключ вашего непонимания кодировок вообще.
Попробуйте внимательно осознать следующее:

Строка это строка, без каких либо кодировок. Кодировка это то как строка представляется в виде массива байт. То есть, строка это просто текст. А кодировка, это то как именно текст храниться в памяти, файле или сетевом пакете.

Вот когда вы поймете этот момент, тогда решать проблемы кодировок станет на много понятнее.
...
Рейтинг: 0 / 0
Почему приходят вопросительные знаки?
    #39014221
VaneS Ri_lax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не все тупо сдирают чужие коды, кто то пытается писать сам!
Я взял за основу вот эту библиотеку commons-net
Пошел сюда и сюда
Вроде все реализовал, письма начали отправляться, но вот не могу найти как там и где установить нужную мне кодировку.
По моим предположениям кодировку надо указывать где то тут
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Writer writer = smtpAuth.sendMessageData();
            System.out.println(smtpAuth.getReplyString());
            
            SimpleSMTPHeader header = new SimpleSMTPHeader("web@domen.ru", "ivan@domen.ru", "Тестовый заголовок письма");
            
            header.addHeaderField("Content-type", "text/plain; charset=utf-8");
           
            writer.write(header.toString());
            writer.write("Привет, как дела?");
            writer.close();


но это предположения, я не совсем хорошо знаю этот язык программирования.
...
Рейтинг: 0 / 0
Почему приходят вопросительные знаки?
    #39014277
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VaneS Ri_laxНе все тупо сдирают чужие коды, кто то пытается писать сам!

Кто не хочет тупа передирать чужие коды, тот тупо читает документацию, а коды передирает, но не тупо, а творчески (для чего требуется тупое чтение документации).
В данном случае применён компонент SMTPClient из Apache Commons Net, являющийся оболочкой к JavaMail. По замыслу авторов, он должен облегчать работу с ней. Не уверен, что действительно облегчит, т.к. по JavaMail есть хорошая документация и программные примеры, из которых видно, где задавать кодировку (может быть несколько мест, в частности для заголовка и текста письма задаются отдельно). Но раз применён SMTPClient, то я тупо заглянул в документацию по нему и увидел, что кроме конструктора без аргументов:

Код: java
1.
 AuthenticatingSMTPClient smtpAuth = new AuthenticatingSMTPClient();



есть конструкторы с указанием кодировки, например:
Код: java
1.
AuthenticatingSMTPClient(String protocol, String encoding)



Вдруг поможет.
...
Рейтинг: 0 / 0
Почему приходят вопросительные знаки?
    #39014347
VaneS Ri_lax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я и пытаюсь делать по документации, просто наверное опыта не хватает или внимательности)
Спасибо большое, вы мне очень помогли! Действительно не хватало просто прописать в конструкторе какой протокол использовать и кодировку. Если передавать в конструктор просто кодировку, без протокола то ничего не работает, а я ранее пытался делать именно так! Спасибо еще раз большое за подсказку!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему приходят вопросительные знаки?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]