Отправка почты через SMTP-сервер Gmail с использованием Win API - PullRequest
1 голос
/ 19 июля 2010

Я пытаюсь использовать SMTP-сервер gmail smtp.gmail.com для отправки писем с использованием C в Windows.Я могу подключиться к порту 587 сервера, однако сервер отвечает, что STARTTLS / TLS необходимо.Есть ли какой-либо вызов Windows API для запуска соединения TLS?

Стоит ли мне даже написать это приложение на C или использовать Python?

Редактировать: Кто-нибудь смог отправить письмо, подключившись кsmtp.gmail.com используя Telnet?Я получил

220 mx.google.com ESMTP g4sm73428740wae.2
HELO hello
502 5.5.1 Unrecognized command. g4sm73428740wae.2
HELO hello.hello
250 mx.google.com at your service
MAIL FROM:a@gmail.com
530 5.7.0 Must issue a STARTTLS command first. g4sm73428740wae.2
STARTTLS
220 2.0.0 Ready to start TLS
MAIL FROM:a@gmail.com

и соединение потеряно

Ответы [ 3 ]

2 голосов
/ 19 июля 2010

Вам потребуется либо оболочка .NET для Microsoft SmtpClient, чтобы создать DLL, которая может использовать функции .NET для поддержки SSL / TLS через SMTP, либо использовать OpenSSL для обработки соединений.

Вероятно, вам было бы полезно написать это на C ++.Я не знаком с Python, но я уверен, что есть библиотеки, такие как TLS Lite (Edit: см. Ниже, smtplib, очевидно, также предоставляет вам эту функциональность)* Редактирование: На основании вашего редактирования у вас должна быть программа, которая знает, как обрабатывать команду STARTTLS.GMail требует защищенных соединений и имени пользователя / пароля по умолчанию для всех SMTP-соединений.Вы можете подключиться к порту 25, но вам придется переключиться на безопасный порт после первоначального подключения.Поэтому при переходе на http://mail.google.com, он автоматически переключается на соединение https.Некоторое время назад в Интернете была целая большая дискуссия об этом ..

1 голос
/ 21 июля 2010

Если вы не хотите использовать OpenSSL или другую стороннюю библиотеку SSL / TLS, вы можете вместо этого использовать собственные API SSPI / SChannel от Microsoft. Его можно использовать поверх сокета, где сокет обрабатывает ввод / вывод байтов низкого уровня, и вы передаете байты в / из функций SSPI / SChannel для обработки.

1 голос
/ 20 июля 2010

Если вы решите записать его на C, вам понадобится библиотека типа GNU SASL , которая обеспечивает безопасную аутентификацию SMTP.Если вы выберете C ++, как было предложено ранее, я бы посмотрел на VMime , которая является бесплатной библиотекой C ++, использующей GSASL.На сайте есть пример , который показывает, как подключиться к GMail.

...