Russian Qt Forum
Ноябрь 23, 2024, 14:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 [3] 4   Вниз
  Печать  
Автор Тема: Отправка сообщений по протоколу SMTP  (Прочитано 46235 раз)
ритт
Гость
« Ответ #30 : Сентябрь 14, 2010, 19:51 »

раз уж такие пляски,
QString::arg() - это поиск с заменой. причём, вставляемая подстрока обычно длиннее заменямой -> многократные выделения и копирования области памяти...

Цитировать
There are three ways you can access this improved method of string construction. The straightforward way is to include QStringBuilder wherever you want to use it, and use the '%' operator instead of '+' when concatenating strings:
     #include <QStringBuilder>

     QString hello("hello");
     QStringRef el(&hello, 2, 3);
     QLatin1String world("world");
     QString message =  hello % el % world % QChar('!');

A more global approach is to include this define:
     #define QT_USE_FAST_CONCATENATION

and use '%' instead of '+' for string concatenation everywhere. The third approach, which is the most convenient but not entirely source compatible, is to include two defines:
     #define QT_USE_FAST_CONCATENATION
     #define QT_USE_FAST_OPERATOR_PLUS

and the '+' will automatically be performed as the QStringBuilder '%' everywhere.

iirc, в 4.7 QT_USE_FAST_CONCATENATION объявлен по умолчанию, что уже даёт ощутимую оптимизацию; объявлением QT_USE_FAST_OPERATOR_PLUS включаем эту оптимизацию повсеместно для кода QString() + QString().

т.о. получаем всего одно выделение памяти и несколько копирований...
что быстрее?


зы. не бывает некритичного к производительности кода. нужно просто писать хороший код)
к примеру, если вы знаете, что передача параметра по ссылке быстрее, чем копирующий конструктор, вы же будете в функциях использовать ссылки, независимо от того, является ли код критичным к производительности или нет, верно?)
« Последнее редактирование: Сентябрь 14, 2010, 20:01 от Константин » Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #31 : Сентябрь 15, 2010, 00:04 »

Но у .arg есть неоспоримые преимущества - наглядность и возможность перевода. Я его использую повсеместно, и только там где жмет производительность уже заморачиваюсь.

Потом, оптимизация суммирования строк - это новая фича начиная с 4.6 (я об этом и не знал даже). До этого было все уныло. И потом никто не мешает также соптимизировать функции форматирования также через билдер, я подозреваю что в одной из следующих версий и до нее доберутся.
Записан

Гугль в помощь
majatu
Гость
« Ответ #32 : Апрель 28, 2011, 11:19 »

как-то не по теме разговор, лучше расскажите, как вложение отправить
Записан
CuteBunny
Гость
« Ответ #33 : Апрель 29, 2011, 07:39 »

Код
C++ (Qt)
Content-Type: application/octet-stream; name=""
Content-Disposition: attachment; filename=""
Content-Transfer-Encoding: base64
 
Записан
daimon
Гость
« Ответ #34 : Июнь 15, 2011, 17:19 »

Вот вам сорсы, во вложении изменить расширение на .rar
при создании rar есть выбор в zip
Записан
asrael
Гость
« Ответ #35 : Сентябрь 11, 2012, 21:32 »

Отличная вещь! Только почему-то меняет в теме письма "_" на " ". Изменение кодировки дело не меняет..
Записан
PavelVX
Гость
« Ответ #36 : Октябрь 18, 2012, 06:20 »

Подскажите пожалуйста: а можно как-то отправлять почту через почтового клиента по умолчанию? Для всех подобно этому коду нужно знать, адруса, smtp сервера. Но есть почтовый клиент уже настроенный. Можно ли через него отправлять письма с вложеним?
Записан
virtual_root
Гость
« Ответ #37 : Ноябрь 22, 2012, 12:56 »

спасибо за код, он прекрасно работает!
Записан
Hirurg
Гость
« Ответ #38 : Август 28, 2018, 12:02 »

Здравствуйте! К сожалению код уже не так прекрасно работает и серверы mail.ru отвечают "500 AUTH available only with SSL or TLS\r\n"
Подскажите пожалуйста, можно ли как-то модифицировать этот код с учётом изменения политики mail.ru относительно шифрования, и если да, то как?
Записан
Apktyc
Самовар
**
Offline Offline

Сообщений: 133


Просмотр профиля
« Ответ #39 : Август 28, 2018, 12:37 »

Здравствуйте! К сожалению код уже не так прекрасно работает и серверы mail.ru отвечают "500 AUTH available only with SSL or TLS\r\n"
Подскажите пожалуйста, можно ли как-то модифицировать этот код с учётом изменения политики mail.ru относительно шифрования, и если да, то как?
Начать использовать QSslSocket для установки защищенного соединения. На 465 порте (обычно implicitTLS) должно хватить и этого. Для 587 порта (обычно explicitTLS) потребуется реализация ssl рукопожатия (STARTTLS и т.д.).
Не забываем подложить приложению библиотеки libeay32.dll, ssleay32.dll (проживают на дне океана в %QtPath%\Tools\%mingw%\opt\bin)
Записан
Hirurg
Гость
« Ответ #40 : Август 28, 2018, 12:49 »

Начать использовать QSslSocket для установки защищенного соединения. На 465 порте (обычно implicitTLS) должно хватить и этого. Для 587 порта (обычно explicitTLS) потребуется реализация ssl рукопожатия (STARTTLS и т.д.).
Не забываем подложить приложению библиотеки libeay32.dll, ssleay32.dll (проживают на дне океана в %QtPath%\Tools\%mingw%\opt\bin)
Спасибо за ответ! Продолжил копаться на форуме, прочитал про QSslSocket и решение пришло само собой  Подмигивающий
С библиотеками libeay32.dll, ssleay32.dll немножко пришлось помучаться, мне помогло следующее решение: https://forum.qt.io/topic/91777/qsslsocket-cannot-call-unresolved-function-sslv23_client_method
Если в двух словах, скачал с сайта http://slproweb.com/products/Win32OpenSSL.html инсталляцию Win32_OpenSSL_v1.0.2p.exe, и уже из неё взял нужные dll. С теми, которые на дне океана, не заработало
« Последнее редактирование: Август 28, 2018, 13:33 от Hirurg » Записан
Hirurg
Гость
« Ответ #41 : Август 28, 2018, 18:03 »

Всё-таки надо прояснить ещё кое-что, а точнее кодировку темы сообщения.
Исходники хранятся в Utf-8 и выглядят так:
Цитировать
QString subject = QString::fromLocal8Bit("Тема письма");
QString body = QString::fromLocal8Bit("Текст сообщения");
По итогу текст сообщения отображается в полученном письме корректно, а тема выглядит как
Цитировать
Тема Ð¿Ð¸Ñ ÑŒÐ¼Ð°
Что делать, как правильно преобразовать строку для темы письма?
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #42 : Август 28, 2018, 20:31 »

Знакомая проблема. Я использую библиотеку SmtpClient for Qt (Tőkés Attila), так там для того, чтобы избежать этих кракозябр, нужно отдельно задавать кодировку темы письма.
Код
C++ (Qt)
       MimeMessage message;
       message.setHeaderEncoding(MimePart::QuotedPrintable);
 
В самой библиотеке строка преобразования темы выглядит так (mimemessage.cpp):
Код
C++ (Qt)
   case MimePart::QuotedPrintable:
       mime += "=?utf-8?Q?" + QuotedPrintable::encode(QByteArray().append(subject)).replace(' ', "_").replace(':',"=3A") + "?=";
       break;
 
Ну и используется кодировка QuotedPrintable::encode (quotedprintable.cpp). Посмотрите исходники, думаю, разберетесь (я не вникал))
Кстати, проблема вылезала только на смартфонах, в mail.ru все было хорошо.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Apktyc
Самовар
**
Offline Offline

Сообщений: 133


Просмотр профиля
« Ответ #43 : Август 28, 2018, 20:44 »

Надо смотреть заголовок письма, какая кодировка там.
utf-8?Q? - это quoted-printable;
utf-8?B? - base64.
Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 584


Просмотр профиля
« Ответ #44 : Август 28, 2018, 21:16 »

Исходники хранятся в Utf-8 и выглядят так:
Цитировать
QString subject = QString::fromLocal8Bit("Тема письма");
QString body = QString::fromLocal8Bit("Текст сообщения");

Если исходники в utf-8, то должно быть
Код
C++ (Qt)
QString subject = QString::fromUtf8("Тема письма");
QString body = QString::fromUtf8("Текст сообщения");
 
Записан
Страниц: 1 2 [3] 4   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.168 секунд. Запросов: 22.