70

教育目的で、SMTPの基本的で単純なルールを使用して、SMTPサーバーを介して電子メールを送信する必要があります。

smtp4devを使用してそれを行うことができました。Itelnet localhost 25とコマンドは次のとおりです。

ここに画像の説明を入力してください

GmailSMTPサーバーを使用して同じことをしたいと思います。ただし、認証とTLSが必要です。Gmailでそれを行う方法がわかりません。これがのスクリーンショットですtelnet smtp.gmail.com 587

ここに画像の説明を入力してください

コマンドに関するウィキペディアの記事を含む多くのリンクを検索して見つけました。STARTTLSしかし、TLSを使用したり、コマンドラインを使用してGmailのSMTPサーバーに認証したりすることはできません(またはプログラミング言語でコマンドを自分で送信することもできません)。誰か助けてもらえますか?

4

4 に答える 4

117

Gmailで送信するには、暗号化された接続を使用する必要があります。これはtelnetだけでは不可能ですが、opensslなどのツールを使用できます。

opensslのstarttlsオプションを使用して接続し、プレーン接続を暗号化に変換します...

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

またはsslsockectに直接接続します...

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

EHLOローカルホスト

その後、base64でエンコードされたユーザー名/パスワードを使用してサーバーへの認証を行います

AUTH PLAIN AG15ZW1haWxAZ21haWwuY29tAG15cGFzc3dvcmQ =

コマンドラインからこれを取得するには:

echo -ne '\00user@gmail.com\00password' | base64
AHVzZXJAZ21haWwuY29tAHBhc3N3b3Jk

次に、例のように「mailfrom:」を続行します

セッション例:

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: <gryphius-demo@gmail.com>
250 2.1.0 OK m46sm11546481eeh.9
rcpt to: <somepoorguy@example.com>
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
于 2012-06-15T11:05:40.557 に答える
27
于 2013-08-15T15:11:33.500 に答える
8

誰も言及していないように-私はそのような目的のために素晴らしいツールを使用することをお勧めします-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.

それは多くのオプションを持っており、あなたが望むほとんどすべてを行うことができます。

GMAIL:STARTTLS、SSLv3(そして、はい、2016年でもGmailはsslv3をサポートしています)

$ echo "Hello world" | swaks -4 --server smtp.gmail.com:587 --from user@gmail.com --to user@example.net -tls --tls-protocol sslv3 --auth PLAIN --auth-user user@gmail.com --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:<user@gmail.com>
<~  250 2.1.0 OK h8sm76342lbd.48 - gsmtp
 ~> RCPT TO:<user@example.net>
<~  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: user@example.net
 ~> From: user@gmail.com
 ~> 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、別名SMTPS、tlsv1.2

$ echo "Hello world" | swaks -4 --server smtp.mail.yahoo.com:465 --from user@yahoo.com --to user@gmail.com --tlsc --tls-protocol tlsv1_2 --auth PLAIN --auth-user user@yahoo.com --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:<user@yahoo.com>
<~  250 OK , completed
 ~> RCPT TO:<user@gmail.com>
<~  250 OK , completed
 ~> DATA
<~  354 Start Mail. End with CRLF.CRLF
 ~> Date: Wed, 17 Feb 2016 10:08:28 +0000
 ~> To: user@gmail.com
 ~> From: user@yahoo.com
 ~> 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.

私は過去5年間、swaksを使用してnagiosからGmail経由でメール通知を問題なく送信してきました。

于 2016-02-17T10:30:05.603 に答える
3

既存の回答に基づいて、パスワードを開示せずに、コマンドラインからGMailアカウントを使用してSMTP経由で自動電子メールを送信するためのステップバイステップガイドを次に示します。

要件

まず、次のソフトウェアパッケージをインストールします。

これらの手順はLinuxオペレーティングシステムを想定していますが、Windows(Cygwinまたは同等のネイティブバージョンを介して)または他のオペレーティングシステムへの移植はかなり簡単である必要があります。

認証

次のシェルスクリプトを次のように保存します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

実行可能にして、次のように実行します。

chmod +x authentication.sh
./authentication.sh

プロンプトが表示されたら、電子メールアドレスとパスワードを入力します。これは次のようになります。

Email (shown): bob@gmail.com
Password (hidden): 
AGJvYkBnbWFpbC5jb20AYm9iaXN0aGViZXN0cGVyc29uZXZlcg==

最後の行(AGJ...==)をコピーします。これは認証に使用されるためです。

通知

次のexpectスクリプトを次のように保存しますnotify.sh(最初の行はexpectプログラムを参照していることに注意してください)。

#!/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"
            }
          }
        }
      }
    }
  }
}

次の変更を行います。

  1. YOUR_AUTHENTICATION_CODE認証スクリプトによって生成された認証コードを貼り付けます。
  2. YOUR_EMAIL_ADDRESS認証コードの生成に使用したメールアドレスに変更してください。
  3. ファイルを保存します。

たとえば(山かっこは電子メールアドレス用に保持されていることに注意してください):

send "AUTH PLAIN AGJvYkBnbWFpbC5jb20AYm9iaXN0aGViZXN0cGVyc29uZXZlcg==\n"
send "MAIL FROM: <bob@gmail.com>\n"

最後に、通知スクリプトを次のように実行可能にします。

chmod +x notify.sh

メールを送る

次のようにコマンドラインから電子メールを送信します。

./notify.sh recipient@domain.com "Command Line" "March 14" "15:52"
于 2016-03-29T23:21:43.297 に答える