curl отправка писем через GMail
Новая напасть. Программа, которая автоматически слала письма месяца два назад через GMail с использованием
smtps://smtp.gmail.com:465
теперь не работает. Да, она запускалась давненько, но я зашел в аккаунт GMail - сторонние приложения разрешены.
Сейчас выдает
* Expire in 0 ms for 6 (transfer 0x14a9e90)
* Expire in 1 ms for 1 (transfer 0x14a9e90)
* Expire in 0 ms for 1 (transfer 0x14a9e90)
* Expire in 1 ms for 1 (transfer 0x14a9e90)
* Expire in 0 ms for 1 (transfer 0x14a9e90)
* Expire in 0 ms for 1 (transfer 0x14a9e90)
* Expire in 2 ms for 1 (transfer 0x14a9e90)
* Expire in 0 ms for 1 (transfer 0x14a9e90)
* Expire in 0 ms for 1 (transfer 0x14a9e90)
* Expire in 2 ms for 1 (transfer 0x14a9e90)
* Expire in 0 ms for 1 (transfer 0x14a9e90)
* Expire in 0 ms for 1 (transfer 0x14a9e90)
* Expire in 2 ms for 1 (transfer 0x14a9e90)
* Expire in 0 ms for 1 (transfer 0x14a9e90)
* Expire in 0 ms for 1 (transfer 0x14a9e90)
* Expire in 2 ms for 1 (transfer 0x14a9e90)
* Expire in 0 ms for 1 (transfer 0x14a9e90)
* Expire in 0 ms for 1 (transfer 0x14a9e90)
* Expire in 2 ms for 1 (transfer 0x14a9e90)
* Expire in 1 ms for 1 (transfer 0x14a9e90)
* Expire in 1 ms for 1 (transfer 0x14a9e90)
* Expire in 4 ms for 1 (transfer 0x14a9e90)
* Expire in 2 ms for 1 (transfer 0x14a9e90)
* Expire in 2 ms for 1 (transfer 0x14a9e90)
* Expire in 8 ms for 1 (transfer 0x14a9e90)
* Expire in 8 ms for 1 (transfer 0x14a9e90)
* Expire in 8 ms for 1 (transfer 0x14a9e90)
* Expire in 13 ms for 1 (transfer 0x14a9e90)
* Trying 108.177.14.109...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x14a9e90)
* connect to 108.177.14.109 port 465 failed: Timed out
* Failed to connect to smtp.gmail.com port 465: Timed out
* Closing connection 0
Поменял порт на 587, имеем
* Expire in 4 ms for 1 (transfer 0x158a508)
* Expire in 4 ms for 1 (transfer 0x158a508)
* Expire in 4 ms for 1 (transfer 0x158a508)
* Expire in 8 ms for 1 (transfer 0x158a508)
* Expire in 9 ms for 1 (transfer 0x158a508)
* Expire in 9 ms for 1 (transfer 0x158a508)
* Expire in 16 ms for 1 (transfer 0x158a508)
* Expire in 50 ms for 1 (transfer 0x158a508)
* Expire in 50 ms for 1 (transfer 0x158a508)
* Expire in 32 ms for 1 (transfer 0x158a508)
* Expire in 50 ms for 1 (transfer 0x158a508)
* Expire in 50 ms for 1 (transfer 0x158a508)
* Expire in 64 ms for 1 (transfer 0x158a508)
* Expire in 50 ms for 1 (transfer 0x158a508)
* Expire in 50 ms for 1 (transfer 0x158a508)
* Expire in 50 ms for 1 (transfer 0x158a508)
* Trying 108.177.14.108...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x158a508)
* Connected to smtp.gmail.com (108.177.14.108) port 587 (#0)
* schannel: SSL/TLS connection with smtp.gmail.com port 587 (step 1/3)
* schannel: disabled server certificate revocation checks
* schannel: verifyhost setting prevents Schannel from comparing the supplied target name with the subject name
s in server certificates.
* schannel: sending initial handshake data: sending 176 bytes...
* schannel: sent initial handshake data: sent 176 bytes
* schannel: SSL/TLS connection with smtp.gmail.com port 587 (step 2/3)
* schannel: failed to receive handshake, need more data
* schannel: SSL/TLS connection with smtp.gmail.com port 587 (step 2/3)
* schannel: encrypted data got 365
* schannel: encrypted data buffer: offset 365 length 4096
* schannel: next InitializeSecurityContext failed: SEC_E_INVALID_TOKEN (0x80090308) - Предоставленный функции
токен неправилен
* Closing connection 0
Что ему не нравится? Что я делаю не так? Что-то изменилось на GMail? Пароли-логины не менялись.
Словом, в растерянности...
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Вы перешли не просто на другой порт, но и на иной протокол.
В соответствии с кодом на сайте curl, следует использовать url типа
smtp://mainserver.example.net:587
и установить некоторые опции:
curl_easy_setopt(curl, CURLOPT_USE_SSL, (long)CURLUSESSL_ALL);
и если у вас нет сертификата ()а судя по вопросу, его нет)
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);