Russian Qt Forum

Qt => Дополнительные компоненты => Тема начата: pokidoff от Март 22, 2011, 11:14



Название: Класс для отсылки почты с вложениями по SMTP
Отправлено: pokidoff от Март 22, 2011, 11:14
Написал класс для отправки почты с вложениями по SMTP. Делюсь.

Пример использования:
Код:
   
    QSMTP *mail = new QSMTP(/*HOST*/,/*PORT*/ 25);
    mail->setSender(/*SENDER E-MAIL*/,/*SENDER NAME*/);

    QHash<QString,QString> rcpts;
    rcpts.insert(/*RECIPIENT1 E-MAIL*/,/*RECIPIENT1 NAME*/);
    rcpts.insert(/*RECIPIENT2 E-MAIL*/,/*RECIPIENT2 NAME*/);
    rcpts.insert(/*RECIPIENT3 E-MAIL*/,/*RECIPIENT3 NAME*/);

    mail->setRecipients(rcpts);

    mail->setAttachments(QStringList()<<"C:\\smtp.7z"<<"C:\\smtp.zip");
    mail->setSubject("Пробный запуск");
    mail->setBody("Письмо сгенерировано QT");
    mail->setEncoding("UTF-8");
    mail->sendMail();

Из возможностей:
- работа напрямую с SMTP сервером;
- возможность использования html в теле письма;
- отправка нескольким адресатам;
- отправка одного или нескольких вложений;
- есть возможность изменять кодировку письма. По-умолчанию - windows-1251


SSL не поддерживает, кто хочет может развить тему


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: Пантер от Март 22, 2011, 11:17
Опиши возможности и пример использования.


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: ритт от Март 22, 2011, 15:39
Письмо отсылается в кодировке windows-1251, но это можно поправить в коде.
а вот это уже плохо. нужно бы сеттер/геттер под эти нужды - дабы не хакать сорцы каждый раз.

з.ы. s/QT/Qt/g


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: Ubuntu_linux от Март 23, 2011, 01:21
Клас, то что не хватало....
А на каких доменах тестилос?


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: pokidoff от Март 23, 2011, 08:57
Тестилось в корпоративной локальной сети


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: Пантер от Март 23, 2011, 09:58
SSL/TSL умеет? С gmail сможет работать?
Перенеси описание из второго поста в первый пост.


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: Ubuntu_linux от Март 23, 2011, 13:47
Все таки допиляйте, чтоб можно било изменять кодировку! Пожалуйста. :'(


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: pokidoff от Март 23, 2011, 14:38
Допилил и проверил, все работает. См первый пост


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: vipet от Март 24, 2011, 20:08
SSL/TSL умеет?

+1 за эту фичу


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: nn1317 от Апрель 03, 2011, 21:16
авторизация на смтп сервере есть? типа чтоб через яндекс-ский смтп отправить)


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: blood_shadow от Апрель 09, 2011, 17:26
народ, это у меня только проблема?
взял этот класс прицепил к нему авторизацию, кодировку не трогал и если отправить с кириллицей
получаю на другой почте неправильные символы, типа имя отправителя "Сергей" а получаю Aaii
в чем может быть проблема?


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: blood_shadow от Апрель 09, 2011, 17:39
все разобрался, почти день убил.. вечером будет готовое решение с полной поддержкой кириллицы
и авторизацией


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: nn1317 от Апрель 09, 2011, 17:57
не знаю)) я за 10 минут поставил и настроил ssmtp и через QProcess просто запускал отправку письма с любыми вложениями)) стоит ли мучаться?))


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: AlphaGh0St от Март 01, 2012, 23:55
взял этот класс прицепил к нему авторизацию

Всем привет!
Возникла необходимость отправить письмо, воспользовался кодом с поддержкой авторизации, предоставленным blood_shadow. Оба ящика (отправителя и получателя) находятся на одном сервере - mail.ru.
Код отправки письма (с вложением):
Код:
    SMTP smtp("smtp.mail.ru", 587);
    smtp.setSender("my_mail1@mail.ru", "my_mail1");

    QHash <QString, QString> hash;
    hash.insert("my_mail2@mail.ru", "my_mail2");

    smtp.setRecipients(hash);
    smtp.setEncoding("UTF-8");
    smtp.setLogin("my_mail1@mail.ru");
    smtp.setPass("my_pass");

    smtp.setSubject("test");
    smtp.setBody("just test");
    smtp.setAttachments(QStringList() << "D:\\test_file.zip"); // прикреплённый файл
    smtp.sendMail();

Прошло 10 минут, письмо так и не пришло.
Подскажите, в чём проблема?

Благодарю.


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: Странник от Март 02, 2012, 00:08
в Qxt довольно неплохо поддержка SMTP была реализована, кому интересно - гляньте доку. защищенное соединение и вложения поддерживались точно, по поводу html не помню.


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: Kurles от Март 02, 2012, 01:50
Еще один (http://www.qtforum.org/article/36559/smtp-client.html) SMTP клиент для Qt, с поддержкой ssl и html.


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: AlphaGh0St от Март 02, 2012, 19:10
Еще один (http://www.qtforum.org/article/36559/smtp-client.html) SMTP клиент для Qt, с поддержкой ssl и html.

Спасибо, помогло.
Только в в файле smtpclient.cpp в методе bool SmtpClient::connectToHost() заменил приветствие для сервера на "EHLO mail.ru"


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: fantom от Сентябрь 01, 2012, 17:10
Что то не работает у меня этот класс:
Код:
   
    QSMTP *mail = new QSMTP("smtp.mail.ru" ,/*PORT*/ 25);
    mail->setSender("tratata@mail.ru", "QT1");
    mail->setEncoding("UTF-8");

    mail->setSubject("Пробный запуск");
    mail->setBody("Письмо сгенерировано QT");

    mail->setAttachments(QStringList()<<"C:\\Default.m3u");

    mail->sendMail();

В чем может быть проблема?


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: panAlexey от Сентябрь 19, 2012, 17:15
Может сразу почтовик замутим? :)
А то этот ЗаеБат задрал уже, хочется фришку :)


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: Bepec от Сентябрь 19, 2012, 18:39
Зебат хорош. Но фришку думается мне писать тяжко будет. (именно мне :) ) Ибо незнаком я со зверем smtp :)


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: Serr500 от Сентябрь 19, 2012, 22:19
Ибо незнаком я со зверем smtp :)
А ишшо тама треба знакомство со зверьями IMAP и POP3...  ;)


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: panAlexey от Октябрь 03, 2012, 16:42
Зебат хорош. Но фришку думается мне писать тяжко будет. (именно мне :) ) Ибо незнаком я со зверем smtp :)
Я бы ынтерфейсные вещи взял. а вот к протоколам еще не подкатывал.
кросовую либу бы с протоколами да интерфейсами, а окошки ноу проблем.
тандерберд непривычен, не прет он меня чето.


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: sergek от Февраль 03, 2014, 19:14
Еще один (http://www.qtforum.org/article/36559/smtp-client.html) SMTP клиент для Qt, с поддержкой ssl и html.
Коллеги, кто-нибудь уже сделал доброе дело и устранил из этой библиотеки все утечки памяти?


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: OKTA от Февраль 07, 2014, 09:18
Уже давно взял и написал свой класс  :D


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: Bepec от Февраль 07, 2014, 10:51
Просим :)


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: OKTA от Февраль 07, 2014, 14:38
Не могу, договор не разрешает  :D
Стандарт на SMTP - самый простой из всех стандартов из почтового семейства и разобраться в нем, да и написать готовый класс - дело одного дня с кофе и печеньками))) То ли дело IMAP - вот там да - можно и подзастрелиться местами + парсинг сообщений еще то занятие (такого могут напридумывать - жуть!), а SMTP очень милый и хороший  ;D


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: sergek от Февраль 07, 2014, 20:46
Не могу, договор не разрешает  :D
Вы, наверное, по ошибке сюда? У меня есть, но фигвам?


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: OKTA от Февраль 07, 2014, 21:00
нет, это был прямой намек, что это на самом деле делается быстро и просто))) если что - могу помочь советом, если будут какие-то сложности с Rfc)  ;)


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: sergek от Февраль 07, 2014, 21:18
нет, это был прямой намек, что это на самом деле делается быстро и просто))) если что - могу помочь советом, если будут какие-то сложности с Rfc)  ;)
Ну, так помогите. Просьба была по устранению утечек памяти в _фриварной_ библиотеке. Зачем про фигу в кармане?  :)


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: OKTA от Февраль 07, 2014, 22:55
Ок, ок, либу посмотрел, как минимум не хватает 5 строчек на первый взгляд  ;D ;D Но сначала скажите, что вы уже сделали для устранения утечек?)  ;)

Вы не подумайте, это я спрашиваю ради совместной доработки, а не чтобы поиздеваться, как могло показаться!) :)


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: Bepec от Февраль 07, 2014, 23:28
Вас видимо спросили :D


Название: Re: Класс для отсылки почты с вложениями по SMTP
Отправлено: OKTA от Февраль 07, 2014, 23:55
А я вот не хочу так просто ;D
Многие вещи интереснее компанией разбирать, тем более не горит ничего ведь))) И тем более пользы будет куда больше)) И тем более, если человек совсем ничего не делал и не пытался даже, прежде чем спрашивать совета, то я точно отказываюсь что-либо делать  ;D