Подключение к smtp.gmail.com через командную строку - PullRequest
38 голосов
/ 04 октября 2009

Я нахожусь в процессе написания приложения, которое отправляет почту через действительный идентификатор пользователя и пароль GMail.

Я просто хотел смоделировать SMTP-соединение в командной строке Windows XP, а когда я telnet smtp.gmail.com на порт 465 - я ничего не вижу. Пустое командное окно с заголовком Telnet smtp.gmail.com открывается с курсором. Когда я набираю EHLO или обычные команды рукопожатия SMTP, приглашение просто закрывается.

Я не могу понять, что не так и где. Я попытался соединиться с 587, это не соединяется в telnet вообще. Может ли кто-нибудь уточнить, если я делаю что-то не так?

Ответы [ 9 ]

50 голосов
/ 08 декабря 2012

Используя Linux или OSx, делайте то, что рекомендовал Сорин, но используйте вместо этого порт 465. 25 - это общий SMTP-порт, но не то, что использует GMail. Кроме того, я не верю, что вы хотите использовать -starttls smtp

openssl s_client -connect smtp.gmail.com:465

Вы должны получить много информации о сеансе SSL и ответ:

220 mx.google.com ...

Введите

HELO smtp.gmail.com 

и вы получите:

250 mx.google.com at your service

Оттуда это не так просто, как отправка SMTP-сообщений, поскольку в Gmail предусмотрена защита, гарантирующая, что вы отправляете электронные письма только с учетных записей, которые действительно принадлежат вам. Вместо того, чтобы вводить «Helo», используйте «Ehlo». Я не знаю много о SMTP, поэтому я не могу объяснить разницу, и у меня нет времени много исследовать. Возможно, кто-то с большим знанием может объяснить.

Затем введите «auth login», и вы получите следующее:

334 VXNlcm5hbWU6

По сути, это слово «Имя пользователя», закодированное в Base 64. Используя кодировщик Base 64, такой как , этот , закодируйте свое имя пользователя и введите его. Сделайте то же самое для вашего пароля, который запрашивается следующим. Вы должны увидеть:

235 2.7.0 Accepted

И это все, вы вошли в систему.

Есть еще одна странность, которую нужно преодолеть, если вы используете терминалы OSx или Linux. Простое нажатие клавиши «ВВОД», по-видимому, не приводит к CRLF, который необходим SMTP для завершения сообщения. Вы должны использовать «CTRL + V + ENTER». Итак, это должно выглядеть следующим образом:

^M
.^M
250 2.0.0 OK
7 голосов
/ 26 августа 2010

Для терминала OSX:

openssl s_client -connect smtp.gmail.com:25 -starttls smtp 
5 голосов
/ 04 октября 2009

Gmail требует, чтобы SMTP-связь с их сервером была зашифрована. Несмотря на то, что вы открываете соединение с сервером Gmail через порт 465, к сожалению, вы не сможете общаться с ним в незашифрованном виде, поскольку Gmail требует от вас использовать шифрование STARTTLS / SSL для соединения.

4 голосов
/ 04 октября 2009

Jadaaih, вы можете подключить отправку SMTP через CURL - ссылку на Curl Developer Community .

Это Curl Email Client источник .

3 голосов
/ 15 мая 2018

Запуск сеанса с терминала:

openssl s_client -connect smtp.gmail.com:25 -starttls smtp

Последняя строка ответа должна быть "250 SMTPUTF8"

Инициировать вход

auth login

Это должно вернуть "334 VXNlcm5hbWU6".

Введите имя пользователя

Введите свое имя пользователя в кодировке base64 (например, echo -n 'your-username' | base64)

Это должно вернуть "334 UGFzc3dvcmQ6"

Введите пароль

Введите пароль в кодировке base64 (например, echo -n 'your-password' | base64)

Успех

Вы должны увидеть «235 2.7.0 Accepted», и вы успешно вошли в систему

2 голосов
/ 09 января 2014

tcp / 465 изначально предназначался для установления уровня SSL (и более новых TLS) вначале, а внутри - для работы с открытым текстом или простыми старыми протоколами (здесь смтп)

tcp / 587 изначально предназначался для замены порта по умолчанию tcp / 25, когда спаммеры и массовые почтовые атаки начались десять или более лет назад, но также и в те печально известные периоды AOL, когда какой-то забавный провайдер имел несколько блоков на портах по умолчанию исходящий (например, tcp / 25) для отказа своим клиентам (AOL) в массовой рассылке электронной почты / спама в то время, но клиентам AOL, которым необходимо использовать альтернативные почтовые учетные записи, и почтовым провайдерам по-прежнему необходимо было отправлять свои письма из AOL -интернет-соединения, чтобы они все еще могли подключаться к tcp / 587 и делать тогда простой smtp.

Суть способа STARTTLS для создания smtp состоит в том, чтобы использовать два хорошо известных первоначально открытых текстовых порта tcp / 25 и tcp / 587, и только тогда, когда исходное соединение с открытым текстом успешно завершилось, затем запустите слой TLS ( таким образом STARTTLS) с этого момента, имея защищенное соединение с этого момента.

Что касается отладки такого рода вещей, возможно, с помощью инструментов командной строки, например, для окон, существует историческая программа командной строки blat (smtp), которая до сегодняшнего дня не может выполнять TLS (STARTTLS), поэтому она может использовать только обычные текст smtp для отправки своих писем.

http://www.blat.net/

Кроме того, существует множество бесплатных программ с открытым исходным кодом, которые имеют больше возможностей и возможностей, например

клиент smtp: mailsend @ googlecode http://code.google.com/p/mailsend/

клиент smtp: msmtp @ sourceforge (относится к mpop ниже) http://msmtp.sourceforge.net/

клиент pop3: mpop @ sourceforge http://mpop.sourceforge.net/

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

Попробуйте это:

telnet smtp.gmail.com 587
2 голосов
/ 04 октября 2009

Проверьте это сообщение в lifehacker: Geek to Live: создайте резервную копию Gmail с fetchmail Он использует программу командной строки. Проверьте и посмотрите, поможет ли это. Кстати, почему вы используете командную строку, когда есть много других хороших альтернатив?

0 голосов
/ 22 июля 2015

Gmail использует зашифрованное соединение. Таким образом, даже после установления соединения вы не сможете отправить любое электронное письмо. Шифрование немного сложное в управлении. Попробуйте вместо этого использовать openssl.

Тема ниже должна помочь-

Как отправить электронную почту с помощью простых SMTP-команд через Gmail?

...