Открытая исходная библиотека для отправки электронной почты через gmail (smtp.gmail.com) с использованием SMTPS (TLS) - PullRequest
3 голосов
/ 15 ноября 2009

Примечание: если у вас нет времени, чтобы прочитать этот длинный путь, решение (с исходным кодом) здесь: http://www.coastrd.com/smtps.

Долгое время отправка электронной почты через SMTP (порт 25) через удаленный почтовый сервер (обычно в хостинг-компании) была простой в применении. Откройте TCP-порт 25, отправьте "HELO ..." и т. Д.

Чтобы сделать это с помощью службы электронной почты Google, у меня возникает проблема, потому что они настаивают на использовании порта 465 SMTPS, т.е. SMTP с шифрованием TLS:

http://en.wikipedia.org/wiki/Transport_Layer_Security#How_it_works

При поиске способа сделать это с помощью языка, такого как C ++ или разновидности базового, я наткнулся на:

http://forums.realsoftware.com/viewtopic.php?f=2&t=29542

http://forums.realsoftware.com/viewtopic.php?f=2&t=26959&p=162671#p162671

и вопрос по Python:

Ошибка аутентификации Python SMTP в Gmail (отправка электронной почты через SMTP-сервер Gmail)

Если я правильно понимаю, мне понадобится реализовать шифрование TLS в моем коде C ++ вместе со всеми рукопожатиями и согласованием?

Из вопроса C #:

отправка электронной почты с помощью Gmail SMTP (безопасный уровень) в C ++

Эта библиотека не делает этого

http://johnwiggins.net/jwsmtp/

ДОБАВЛЕНО:

Многие люди просто устанавливают stunnel в качестве службы, а затем настраивают его для управления SSL-соединением

http://www.stunnel.org/about/

Stunnel - это оболочка OpenSSL. OpenSSL имеет некоторые проблемы с производительностью (http://josefsson.org/gnutls4win/)

"На некоторых системах инициализация libgcrypt занимает много времени, были сообщения, что это может занять около 10 секунд."

и требует: "libeay32.dll" 1,35 МБ + "libssl32.dll" 310 КБ + "zlib1.dll" 75 КБ

Тогда есть пара коммерческих продуктов:

http://www.chilkatsoft.com/downloads.asp

Этот продукт в основном поставляется как Activex (COM) «dll» (требующий установщика на машине пользователя, чтобы «зарегистрировать» dll - еще одна плохая идея .net).

Установщик загружает "ChilkatMime.dll" 1,33 МБ, "ChilkatCert.dll" 1,26 МБ, "ChilkatUtil.dll" 720 КБ. Разработчики не были заинтересованы в сотрудничестве с настоящей библиотекой C .dll, которую можно было вызывать с любого языка, включая C / C ++ / BASIC / Python и т. Д. И т. Д. Учитывая их отношение, я не удивлен, что они стали жертвами созданных генераторов кода. хакерами.

Помимо сырного названия и художественных работ, их продукты по разумным ценам, но тот, который я попробовал, подключился к порту 25, несмотря на то, что мне сказали использовать порт 465.

В отличие от коммерческого варианта с катализатором:

http://www.catalyst.com/products/sockettools/secure/library/index.html

теперь доступен в качестве компонента основного инструмента для инструментов с торцевыми головками за 1/3 цены. Эти инструменты первого класса! да, вы получаете то, за что платите. Разработчики отзывчивы и открыты для предложений. Они предлагают ВСЕ ароматы DLL, в том числе автономные .dll, которые могут быть поставлены с вашим продуктом, который всего 230k! Для коммерческих решений они выигрывают руки вниз.

Соединение SLL / TLS может быть установлено явно (как только рукопожатие начинает наступление) или неявно (после рукопожатия с использованием STARTTLS и т. Д.)

CodeIgniter, например, неявный (как и опции в Python, asp, php и т. Д.) http://codeigniter.com/forums/viewthread/84689/

Как только соединение установлено, существует «туннель», через который может проходить сеанс MIME:

  "EHLO " + sLocalHost + CRLF
  "MAIL FROM: " + sMailFrom + CRLF
  "RCPT TO: " + "me@mydomain.com" + CRLF  
  "DATA: Testing, Testing xyz" + CRLF 
  CRLF + "." + CRLF
  "QUIT" 

с обычными ответами с сервера.

Некоторые языки обрабатывают связь MIME для вас (инструменты сокетов, codeigniter и т. Д.), И вы просто вводите тему, текст и адрес электронной почты, делая его очень простым в использовании

CryptLib - это решение с открытым исходным кодом, которое упрощает туннель SSL / TLS с DLL-файлом стиля C размером всего 1 МБ (полная компиляция). Поскольку исходный код доступен, можно скомпилировать версию библиотеки DLL с необходимыми компонентами, которых должно быть несколько меньше.

http://www.cs.auckland.ac.nz/~pgut001/cryptlib/download.html

Автор был очень отзывчивым, хотя я сразу же заставил библиотеку работать и спрашивал о диалоге MIME. Существует 330 страниц руководства! Спасибо.

Эта библиотека не является MTA (агентом пересылки почты), поэтому вы должны написать выше разговор MIME, но это БЕСПЛАТНО!

исходный код доступен здесь: http://www.coastrd.com/smtps.

Ответы [ 2 ]

3 голосов
/ 11 августа 2012

Выезд http://sourceforge.net/projects/libquickmail/. Эта библиотека может отправлять почту с дополнительными вложениями нескольким получателям. Транспорт SMTP зависит от libcurl, поэтому он поддерживает такие вещи, как аутентификация и TLS. C API очень прост в использовании. Протестировано на Linux (GCC) и Windows (MinGW), но должно работать на любой платформе, где доступна libcurl.

2 голосов
/ 15 ноября 2009

Вы правы, что вам нужно включить TLS в вашем приложении. Вместо того, чтобы делать это самостоятельно, я бы посоветовал изучить OpenSSL .

Кроме того, вам необходимо включить SMTP в своей учетной записи и поддерживать аутентификацию SMTP для отправки трафика через Gmail.

Существует также дублирующий вопрос , в котором есть несколько указателей, и C # реализация с кодом, который может вам помочь.

Существует также библиотека , которая может быть проще в использовании, чем своя собственная (хотя в настоящее время она не поддерживает TLS).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...