wake-up-neo.com

Wie versende ich E-Mails mit einfachen SMTP-Befehlen über Google Mail?

Zu Unterrichtszwecken muss ich eine E-Mail über einen SMTP-Server senden, wobei ich die grundlegenden und einfachen Regeln von SMTP befolge.

Ich konnte das mit smtp4dev machen. ICH telnet localhost 25 und und Befehle sind:

enter image description here

Ich möchte dasselbe mit dem SMTP-Server von Google Mail tun. Es erfordert jedoch Authentifizierung und TLS. Ich kann nicht herausfinden, wie das für Google Mail funktioniert. Hier ist ein Screenshot von telnet smtp.gmail.com 587:

enter image description here

Ich habe viele Links gesucht und gefunden, einschließlich Wikipedia-Artikel about STARTTLS command. Ich kann TLS jedoch nicht verwenden und mich über die Befehlszeile beim SMTP-Server von Google Mail authentifizieren (oder selbst Befehle in Programmiersprachen senden). Kann jemand helfen?

62
Saeed Neamati

zum Senden über Google Mail benötigen Sie eine verschlüsselte Verbindung. Dies ist nicht nur mit Telnet möglich, aber Sie können Tools wie openssl verwenden

entweder Mit der Option starttls in openssl verbinden, um die einfache Verbindung in eine verschlüsselte zu konvertieren ...

openssl s_client -starttls smtp -connect smtp.gmail.com:587 -crlf -ign_eof

oder direkt mit einem ssl sockect verbinden ...

openssl s_client -connect smtp.gmail.com:465 -crlf -ign_eof

EHLO localhost

danach authentifizieren Sie sich beim Server mit dem base64-verschlüsselten Benutzernamen/Passwort

AUTH PLAIN AG15ZW1haWxAZ21haWwuY29tAG15cGFzc3dvcmQ =

um dies von der Kommandozeile zu bekommen:

echo -ne '\[email protected]\00password' | base64
AHVzZXJAZ21haWwuY29tAHBhc3N3b3Jk

fahren Sie dann mit "mail from:" wie in Ihrem Beispiel fort

beispielsitzung:

openssl s_client -connect smtp.gmail.com:465 -crlf -ign_eof
[... lots of openssl output ...]
220 mx.google.com ESMTP m46sm11546481eeh.9
EHLO localhost
250-mx.google.com at your service, [1.2.3.4]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH
250 ENHANCEDSTATUSCODES
AUTH PLAIN AG5pY2UudHJ5QGdtYWlsLmNvbQBub2l0c25vdG15cGFzc3dvcmQ=
235 2.7.0 Accepted
MAIL FROM: <[email protected]>
250 2.1.0 OK m46sm11546481eeh.9
rcpt to: <[email protected]>
250 2.1.5 OK m46sm11546481eeh.9
DATA
354  Go ahead m46sm11546481eeh.9
Subject: it works

yay!
.
250 2.0.0 OK 1339757532 m46sm11546481eeh.9
quit
221 2.0.0 closing connection m46sm11546481eeh.9
read:errno=0
105
Gryphius

Da ich leider gezwungen bin, einen Windows-Server zu verwenden, konnte ich openssl nicht so zum Laufen bringen, wie in der obigen Antwort angegeben.

Allerdings konnte ich ein ähnliches Programm namens stunnel (das von hier heruntergeladen werden kann) zum Laufen bringen. Ich hatte die Idee von www.tech-and-dev.com , musste aber die Anweisungen leicht ändern. Folgendes habe ich getan:

  1. Installieren Sie den Telnet-Client auf der Windows-Box.
  2. Stunnel herunterladen. (Ich habe eine Datei mit dem Namen stunnel-4.56-installer.exe heruntergeladen und installiert.).
  3. Nach der Installation mussten Sie die Konfigurationsdatei stunnel.conf Suchen, die ich in meinem Fall unter C:\Program Files (x86)\stunnel installiert habe.
  4. Dann müssen Sie diese Datei in einem Text-Viewer wie Editor öffnen. Suchen Sie nach [gmail-smtp] Und entfernen Sie das Semikolon in der Client-Zeile darunter (in der Datei stunnel.conf ist jede Zeile, die mit einem Semikolon beginnt, ein Kommentar). Sie sollten mit etwas enden, wie:

    [gmail-smtp]
    client = yes
    accept = 127.0.0.1:25
    connect = smtp.gmail.com:465
    

    Sobald Sie dies getan haben, speichern Sie die stunnel.conf - Datei und laden Sie die Konfiguration neu (verwenden Sie dazu das Stunnel-GUI-Programm und klicken Sie auf - configuration => Reload).

Jetzt sollten Sie bereit sein, E-Mails im Windows Telnet-Client zu senden!
Gehe zu Start => Ausführen => Cmd.

Sobald cmd geöffnet ist, geben Sie Folgendes ein und drücken Sie die Eingabetaste:

telnet localhost 25

Sie sollten dann etwas Ähnliches wie das Folgende sehen:

220 mx.google.com ESMTP f14sm1400408wbe.2

Sie müssen dann antworten, indem Sie Folgendes eingeben und die Eingabetaste drücken:

helo google

Dies sollte Ihnen die folgende Antwort geben:

250 mx.google.com at your service

Wenn Sie dies erhalten, müssen Sie Folgendes eingeben und die Eingabetaste drücken:

ehlo google

Dies sollte dann die folgende Antwort geben:

250-mx.google.com at your service, [212.28.228.49]
250-SIZE 35651584
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH
250 ENHANCEDSTATUSCODES

Nun sollten Sie bereit sein, sich mit Ihren Google Mail-Daten zu authentifizieren. Geben Sie dazu Folgendes ein und drücken Sie die Eingabetaste:

AUTH LOGIN

Dies sollte dann die folgende Antwort geben:

334 VXNlcm5hbWU6

Dies bedeutet, dass wir bereit sind, uns mithilfe unserer Google Mail-Adresse und unseres Passworts zu authentifizieren.

Da es sich jedoch um eine verschlüsselte Sitzung handelt, müssen wir die in base64 verschlüsselte E-Mail und das Kennwort senden. Um Ihre E-Mail und Ihr Passwort zu verschlüsseln, können Sie ein Konvertierungsprogramm oder eine Online-Website verwenden, um es zu verschlüsseln (zum Beispiel base64 oder auf Google nach 'base64 online encoding'). Ich empfehle Ihnen, die cmd/telnet-Sitzung erst dann erneut zu starten, wenn Sie dies getan haben.

Zum Beispiel würde [email protected] zu dGVzdEBnbWFpbC5jb20 = und das Passwort würde zu cGFzc3dvcmQ =

Sobald Sie dies getan haben, kopieren Sie Ihren konvertierten base64-Benutzernamen in die cmd/telnet-Sitzung und drücken Sie die Eingabetaste. Dies sollte Ihnen folgende Antwort geben:

334 UGFzc3dvcmQ6

Kopieren Sie nun Ihr konvertiertes base64-Passwort, fügen Sie es in die cmd/telnet-Sitzung ein und drücken Sie die Eingabetaste. Dies sollte Ihnen folgende Antwort geben, wenn beide Anmeldeinformationen korrekt sind:

235 2.7.0 Accepted

Sie sollten nun die Absender-E-Mail-Adresse (sollte mit dem Benutzernamen identisch sein) in folgendem Format eingeben und die Eingabetaste drücken:

MAIL FROM:<[email protected]>

Dies sollte Ihnen die folgende Antwort geben:

250 2.1.0 OK x23sm1104292weq.10

Sie können jetzt die Empfänger-E-Mail-Adresse in einem ähnlichen Format eingeben und die Eingabetaste drücken:

RCPT TO:<[email protected]>

Dies sollte Ihnen die folgende Antwort geben:

250 2.1.5 OK x23sm1104292weq.10

Jetzt müssen Sie Folgendes eingeben und die Eingabetaste drücken:

DATA

Welches sollte Ihnen die folgende Antwort geben:

354  Go ahead x23sm1104292weq.10

Jetzt können wir anfangen, die Nachricht zu verfassen! Geben Sie dazu Ihre Nachricht in folgendem Format ein (Tipp: Führen Sie dies im Editor aus und kopieren Sie die gesamte Nachricht in das Cmd/Telnet-Sitzung):

From: Test <[email protected]>
To: Me <[email protected]>
Subject: Testing email from telnet
This is the body

Adding more lines to the body message.

Wenn Sie fertig sind, geben Sie einen Punkt ein:

.

Dies sollte Ihnen die folgende Antwort geben:

250 2.0.0 OK 1288307376 x23sm1104292weq.10

Und jetzt müssen Sie Ihre Sitzung beenden, indem Sie Folgendes eingeben und die Eingabetaste drücken:

QUIT

Dies sollte Ihnen die folgende Antwort geben:

221 2.0.0 closing connection x23sm1104292weq.10
Connection to Host lost.

Und Ihre E-Mail sollte sich jetzt im Postfach des Empfängers befinden!

24
Exile

Wie niemand erwähnt hat - ich würde vorschlagen, ein großartiges Werkzeug für diesen Zweck zu verwenden - swaks

# yum info swaks
Installed Packages
Name        : swaks
Arch        : noarch
Version     : 20130209.0
Release     : 3.el6
Size        : 287 k
Repo        : installed
From repo   : epel
Summary     : Command-line SMTP transaction tester
URL         : http://www.jetmore.org/john/code/swaks
License     : GPLv2+
Description : Swiss Army Knife SMTP: A command line SMTP tester. Swaks can test
            : various aspects of your SMTP server, including TLS and AUTH.

Es hat viele Möglichkeiten und kann fast alles, was Sie wollen.

GMAIL: STARTTLS, SSLv (und ja, 2016 unterstützt Google Mail noch sslv3)

$ echo "Hello world" | swaks -4 --server smtp.gmail.com:587 --from [email protected] --to [email protected] -tls --tls-protocol sslv3 --auth PLAIN --auth-user [email protected] --auth-password 7654321 --h-Subject "Test message" --body -
=== Trying smtp.gmail.com:587...
=== Connected to smtp.gmail.com.
<-  220 smtp.gmail.com ESMTP h8sm76342lbd.48 - gsmtp
 -> EHLO www.example.net
<-  250-smtp.gmail.com at your service, [193.243.156.26]
<-  250-SIZE 35882577
<-  250-8BITMIME
<-  250-STARTTLS
<-  250-ENHANCEDSTATUSCODES
<-  250-PIPELINING
<-  250-CHUNKING
<-  250 SMTPUTF8
 -> STARTTLS
<-  220 2.0.0 Ready to start TLS
=== TLS started with cipher SSLv3:RC4-SHA:128
=== TLS no local certificate set
=== TLS peer DN="/C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.com"
 ~> EHLO www.example.net
<~  250-smtp.gmail.com at your service, [193.243.156.26]
<~  250-SIZE 35882577
<~  250-8BITMIME
<~  250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
<~  250-ENHANCEDSTATUSCODES
<~  250-PIPELINING
<~  250-CHUNKING
<~  250 SMTPUTF8
 ~> AUTH PLAIN AGFhQxsZXguaGhMGdATGV4X2hoYtYWlsLmNvbQBS9TU1MjQ=
<~  235 2.7.0 Accepted
 ~> MAIL FROM:<[email protected]>
<~  250 2.1.0 OK h8sm76342lbd.48 - gsmtp
 ~> RCPT TO:<[email protected]>
<~  250 2.1.5 OK h8sm76342lbd.48 - gsmtp
 ~> DATA
<~  354  Go ahead h8sm76342lbd.48 - gsmtp
 ~> Date: Wed, 17 Feb 2016 09:49:03 +0000
 ~> To: [email protected]
 ~> From: [email protected]
 ~> Subject: Test message
 ~> X-Mailer: swaks v20130209.0 jetmore.org/john/code/swaks/
 ~>
 ~> Hello world
 ~>
 ~>
 ~> .
<~  250 2.0.0 OK 1455702544 h8sm76342lbd.48 - gsmtp
 ~> QUIT
<~  221 2.0.0 closing connection h8sm76342lbd.48 - gsmtp
=== Connection closed with remote Host.

YAHOO: TLS aka SMTPS, tlsv1.2

$ echo "Hello world" | swaks -4 --server smtp.mail.yahoo.com:465 --from [email protected] --to [email protected] --tlsc --tls-protocol tlsv1_2 --auth PLAIN --auth-user [email protected] --auth-password 7654321 --h-Subject "Test message" --body -
=== Trying smtp.mail.yahoo.com:465...
=== Connected to smtp.mail.yahoo.com.
=== TLS started with cipher TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128
=== TLS no local certificate set
=== TLS peer DN="/C=US/ST=California/L=Sunnyvale/O=Yahoo Inc./OU=Information Technology/CN=smtp.mail.yahoo.com"
<~  220 smtp.mail.yahoo.com ESMTP ready
 ~> EHLO www.example.net
<~  250-smtp.mail.yahoo.com
<~  250-PIPELINING
<~  250-SIZE 41697280
<~  250-8 BITMIME
<~  250 AUTH PLAIN LOGIN XOAUTH2 XYMCOOKIE
 ~> AUTH PLAIN AGFhQxsZXguaGhMGdATGV4X2hoYtYWlsLmNvbQBS9TU1MjQ=
<~  235 2.0.0 OK
 ~> MAIL FROM:<[email protected]>
<~  250 OK , completed
 ~> RCPT TO:<[email protected]>
<~  250 OK , completed
 ~> DATA
<~  354 Start Mail. End with CRLF.CRLF
 ~> Date: Wed, 17 Feb 2016 10:08:28 +0000
 ~> To: [email protected]
 ~> From: [email protected]
 ~> Subject: Test message
 ~> X-Mailer: swaks v20130209.0 jetmore.org/john/code/swaks/
 ~>
 ~> Hello world
 ~>
 ~>
 ~> .
<~  250 OK , completed
 ~> QUIT
<~  221 Service Closing transmission
=== Connection closed with remote Host.

Ich habe in den letzten 5 Jahren Swaks verwendet, um E-Mail-Benachrichtigungen von Nagios über Google Mail ohne Probleme zu senden.

5
ALex_hha

Basierend auf den vorhandenen Antworten finden Sie hier eine schrittweise Anleitung zum Senden automatisierter E-Mails über SMTP unter Verwendung eines GMail-Kontos über die Befehlszeile, ohne das Kennwort preiszugeben.

Bedarf

Installieren Sie zunächst die folgenden Softwarepakete:

Diese Anweisungen setzen ein Linux-Betriebssystem voraus, sollten sich jedoch relativ einfach auf Windows (über Cygwin oder native Entsprechungen) oder ein anderes Betriebssystem portieren lassen.

Authentifizierung

Speichern Sie das folgende Shell-Skript als authentication.sh:

#!/bin/bash

# Asks for a username and password, then spits out the encoded value for
# use with authentication against SMTP servers.

echo -n "Email (shown): "
read email
echo -n "Password (hidden): "
read -s password
echo

TEXT="\0$email\0$password"

echo -ne $TEXT | base64

Machen Sie es ausführbar und führen Sie es wie folgt aus:

chmod +x authentication.sh
./authentication.sh

Wenn Sie dazu aufgefordert werden, geben Sie Ihre E-Mail-Adresse und Ihr Passwort an. Das wird ungefähr so ​​aussehen:

Email (shown): [email protected]
Password (hidden): 
AGJvYkBnbWFpbC5jb20AYm9iaXN0aGViZXN0cGVyc29uZXZlcg==

Kopieren Sie die letzte Zeile (AGJ...==), da dies zur Authentifizierung verwendet wird.

Benachrichtigung

Speichern Sie das folgende Expect-Skript als notify.sh (die erste Zeile bezieht sich auf das Expect-Programm):

#!/usr/bin/expect

set address "[lindex $argv 0]"
set subject "[lindex $argv 1]"
set ts_date "[lindex $argv 2]"
set ts_time "[lindex $argv 3]"

set timeout 10
spawn openssl s_client -connect smtp.gmail.com:465 -crlf -ign_eof 

expect "220" {
  send "EHLO localhost\n"

  expect "250" {
    send "AUTH PLAIN YOUR_AUTHENTICATION_CODE\n"

    expect "235" {
      send "MAIL FROM: <YOUR_EMAIL_ADDRESS>\n"

      expect "250" {
        send "RCPT TO: <$address>\n"

        expect "250" {
          send "DATA\n"

          expect "354" {
            send "Subject: $subject\n\n"
            send "Email sent on $ts_date at $ts_time.\n"
            send "\n.\n"

            expect "250" {
                send "quit\n"
            }
          }
        }
      }
    }
  }
}

Nehmen Sie folgende Änderungen vor:

  1. Einfügen über YOUR_AUTHENTICATION_CODE mit dem vom Authentifizierungsskript generierten Authentifizierungscode.
  2. Veränderung YOUR_EMAIL_ADDRESS mit der E-Mail-Adresse, mit der der Authentifizierungscode generiert wurde.
  3. Speicher die Datei.

Zum Beispiel (beachten Sie, dass die spitzen Klammern für die E-Mail-Adresse beibehalten werden):

send "AUTH PLAIN AGJvYkBnbWFpbC5jb20AYm9iaXN0aGViZXN0cGVyc29uZXZlcg==\n"
send "MAIL FROM: <[email protected]>\n"

Zuletzt machen Sie das Benachrichtigungsskript wie folgt ausführbar:

chmod +x notify.sh

E-Mail senden

Senden Sie eine E-Mail über die Befehlszeile wie folgt:

./notify.sh [email protected] "Command Line" "March 14" "15:52"
3
Dave Jarvis