2012-06-15 19 views
60

शैक्षिक उद्देश्यों के लिए, मुझे एसएमटीपी के मौलिक और सरल नियमों का उपयोग करके एक एसएमटीपी सर्वर के माध्यम से एक ईमेल भेजने की जरूरत है।कैसे Gmail के माध्यम से सरल एसएमटीपी आदेशों का उपयोग करते ईमेल भेजने के लिए?

मैं smtp4dev का उपयोग कर ऐसा नहीं कर पा रहा था। मैं telnet localhost 25 और और आदेश हैं:

enter image description here

मैं, एक ही बात करने के लिए जीमेल एसएमटीपी सर्वर का उपयोग कर चाहते हैं। हालांकि, यह प्रमाणीकरण और TLS की आवश्यकता है। मैं यह नहीं समझ सकता कि जीमेल के लिए ऐसा कैसे किया जाए। यहाँ telnet smtp.gmail.com 587 का एक स्क्रीनशॉट है:

enter image description here

मैं खोज की है और Wikipedia's articleSTARTTLS के बारे में आदेश सहित कई लिंक नहीं मिला। लेकिन मैं टीएलएस का उपयोग करने में सक्षम नहीं हूं और कमांड लाइन का उपयोग कर जीमेल के एसएमटीपी सर्वर को प्रमाणित करता हूं (या प्रोग्रामिंग भाषाओं में खुद को कमांड भेज रहा हूं)। क्या कोई मदद कर सकता है?

+0

उदाहरण के लिए, जावा का उपयोग करके आप अपना खुद का प्रोग्राम लिख सकते हैं। –

+0

आप जीमेल के साथ पोर्ट 25 का उपयोग क्यों नहीं करते हैं (बस अपने सर्वर के साथ)? – vbence

+0

यहां एक गाइड है: http://linuxmeerkat.wordpress.com/2013/10/10/emailing-from-a-gmail-acount-via-telnet/ – Pithikos

उत्तर

100

जीमेल पर भेजने के लिए, आपको एक एन्क्रिप्टेड कनेक्शन का उपयोग करने की आवश्यकता है। इस अकेले टेलनेट साथ संभव नहीं है, लेकिन आप की तरह openssl

या तो उपकरणों का उपयोग openssl में STARTTLS विकल्प का उपयोग कर एन्क्रिप्टेड सादा कनेक्शन कन्वर्ट करने के लिए कनेक्ट कर सकते हैं ...

openssl s_client -starttls smtp - कनेक्ट smtp.gmail.com:587 -crlf -ign_eof

या एक ssl से कनेक्ट sockect सीधे ...

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

EHLO स्थानीय होस्ट

उसके बाद, सर्वर

प्राधि मैदान बेस 64 का उपयोग कर इनकोडिंग नाम/पासवर्ड को प्रमाणित AG15ZW1haWxAZ21haWwuY29tAG15cGFzc3dvcmQ =

कमांडलाइन से प्राप्त करने के लिए:

perl -MMIME::Base64 -e 'print encode_base64("\000myemail\@gmail.com\000mypassword")' 
AG15ZW1haWxAZ21haWwuY29tAG15cGFzc3dvcmQ= 

फिर "से मेल:" के साथ जारी अपने उदाहरण की तरह

उदाहरण सत्र:

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 
+0

मैंने ओपनएसएसएल स्थापित किया है, लेकिन कमांड लाइन में कोई कमांड जोड़ा नहीं गया है। सीएमडी में openssl कमांड पाने के लिए मुझे कहां जाना चाहिए? –

+1

क्षमा करें, मुझे नहीं पता कि विंडोज़ पर openssl निष्पादन योग्य कहां स्थापित है, मैं यहां लिनक्स का उपयोग करता हूं। – Gryphius

+0

@ ग्रेफियस मुझे ओपनएसएसएल रिटर्न कोड सत्यापित करें: 20 (स्थानीय जारीकर्ता प्रमाण पत्र प्राप्त करने में असमर्थ) यानी ग्राहक प्रमाणीकरण विफल रहा, फिर भी मैं उपर्युक्त ईमेल भेज सकता हूं, क्या आप कृपया बता सकते हैं क्यों? –

21

दुर्भाग्य के रूप में मैं एक विंडोज़ सर्वर का उपयोग करने मैं openssl में काम कर पाने में असमर्थ रहे हैं मजबूर कर रहा हूँ जिस तरह से ऊपर जवाब पता चलता है।

हालांकि मैं काम करने के लिए एक समान नामक कार्यक्रम stunnel (जो here से डाउनलोड किया जा सकता है) प्राप्त करने में सक्षम था। मुझे www.tech-and-dev.com से विचार मिला लेकिन मुझे निर्देशों को थोड़ा बदलना पड़ा। यहां मैंने किया है:

  1. विंडोज बॉक्स पर टेलनेट क्लाइंट स्थापित करें।
  2. स्टनल डाउनलोड करें। (मैं डाउनलोड किया है और एक फाइल stunnel-4.56-Installer.exe बुलाया स्थापित)।
  3. एक बार तो आप स्थापित stunnel.conf कॉन्फ़िग फ़ाइल है, जो मेरे मामले में मैं फिर C:\Program Files (x86)\stunnel
  4. करने के लिए स्थापित का पता लगाने की जरूरत है, आप इस तरह के नोटपैड किसी पाठ दर्शक में इस फ़ाइल को खोलने की जरूरत है। [gmail-smtp] के लिए देखो और नीचे ग्राहक लाइन पर अर्धविराम हटाने (stunnel.conf फ़ाइल में, हर पंक्ति कि अर्धविराम साथ शुरू होता है एक टिप्पणी है)। आप की तरह कुछ के साथ खत्म करना चाहिए:

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

    बार जब आप इस stunnel.conf फ़ाइल और पुनः लोड config बचाने के (इस प्रयोग stunnel जीयूआई कार्यक्रम करने के लिए, और => पुनः लोडविन्यास पर क्लिक करें) किया है ।

अब आपको विंडोज टेलनेट क्लाइंट में ईमेल भेजने के लिए तैयार होना चाहिए! प्रारंभ => चलाने के लिए
जाओ =>
cmd।

एक बार cmd में खुला प्रकार है निम्न और प्रेस दर्ज करें:

220 mx.google.com ESMTP f14sm1400408wbe.2 

फिर आप टाइप करके जवाब देने के लिए की आवश्यकता होगी निम्नलिखित:

telnet localhost 25 

फिर आप निम्न जैसा कुछ देखना चाहिए और एंटर दबाकर:

helo google 

यह आपको निम्न प्रतिक्रिया देना चाहिए:

250 mx.google.com at your service 

आप इस मिलता है तो आप टाइप करने की आवश्यकता निम्नलिखित और प्रेस दर्ज करें:

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

अब आप तैयार हो जाना चाहिए:

ehlo google 

यह तो आप निम्न प्रतिक्रिया देना चाहिए अपने जीमेल विवरण के साथ प्रमाणित करने के लिए।

AUTH LOGIN 

यह तो आप निम्न प्रतिक्रिया देना चाहिए: इस प्रकार के निम्न और enter ऐसा करने के लिए

334 VXNlcm5hbWU6 

इसका मतलब यह है कि हम अपने जीमेल पते और पासवर्ड का उपयोग करके प्रमाणित करने के लिए तैयार हैं।

हालांकि इस के बाद से एक एन्क्रिप्टेड सत्र, हम ईमेल और पासवर्ड बेस 64 में encoded भेजने के लिए करने जा रहे हैं है। अपने ईमेल और पासवर्ड सांकेतिक शब्दों में बदलना करने के लिए, आप एक कनवर्टर प्रोग्राम या एक ऑनलाइन वेबसाइट का उपयोग (उदाहरण के base64 के लिए या'बेस 64 ऑनलाइन इनकोडिंग' के लिए गूगल पर खोज) यह सांकेतिक शब्दों में बदलना कर सकते हैं। मैं मानता हूं कि आप cmd/telnet सत्र को तब तक स्पर्श न करें जब तक आप ऐसा नहीं कर लेते।

उदाहरण के लिए [email protected] बन जाएगा dGVzdEBnbWFpbC5jb20 = और पासवर्ड बन जाएगा cGFzc3dvcmQ =

एक बार जब आप इस प्रति किया और cmd/टेलनेट सत्र में अपने परिवर्तित बेस 64 उपयोगकर्ता नाम पेस्ट किया है और एंटर दबाए। यह आपको निम्नलिखित प्रतिक्रिया देना चाहिए:

334 UGFzc3dvcmQ6 

अब अपने परिवर्तित बेस 64 पासवर्ड को cmd/telnet सत्र में कॉपी और पेस्ट करें और एंटर दबाएं।

235 2.7.0 Accepted 

अब आप प्रेषक ईमेल (उपयोगकर्ता नाम के रूप में ही होना चाहिए) निम्न स्वरूप और प्रेस में प्रवेश करना चाहिए दर्ज करें::

MAIL FROM:<[email protected]> 
अगर दोनों लॉगिन प्रमाणिकता सही हैं यह आप निम्नलिखित प्रतिक्रिया देना चाहिए

250 2.1.0 OK x23sm1104292weq.10 

अब आप एक ऐसी ही प्रारूप में प्राप्तकर्ता ईमेल पता दर्ज कर सकते हैं और प्रेस दर्ज करें:: यह आपको निम्नलिखित प्रतिक्रिया देना चाहिए

250 2.1.5 OK x23sm1104292weq.10 

अब आप निम्नलिखित लिखें और enter दबाएं करने की आवश्यकता होगी:

RCPT TO:<[email protected]> 

यह आपको निम्नलिखित प्रतिक्रिया देना चाहिए

DATA 

कौन सा आप निम्नलिखित प्रतिक्रिया देना चाहिए:

354 Go ahead x23sm1104292weq.10 

अब हम कंप्यूटर अनुप्रयोग के लिए शुरू कर सकते हैं संदेश OSE! इस निम्न स्वरूप में अपना संदेश दर्ज करने के लिए (टिप: नोटपैड में यह कर और cmd/टेलनेट सत्र में पूरा संदेश कॉपी करें):

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

Adding more lines to the body message. 

जब आप समाप्त कर ईमेल एक डॉट दर्ज :

250 2.0.0 OK 1288307376 x23sm1104292weq.10 

एक:

. 

यह आपको निम्नलिखित प्रतिक्रिया देना चाहिए अब आप टाइप करके अपने सत्र को समाप्त करने की जरूरत है d निम्नलिखित और इंटर बटन दबाने:

QUIT 

यह आप निम्नलिखित प्रतिक्रिया देना चाहिए:

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

और अपने ईमेल अब प्राप्तकर्ता के मेलबॉक्स में होना चाहिए!

+0

क्या हम wireshark का उपयोग कर कमांड लाइन के माध्यम से भेजे गए इन smtp पैकेट को कैप्चर कर सकते हैं? क्योंकि मैं ऐसा करने में असमर्थ हूं। –

2

कोई नहीं के रूप में उल्लेख किया है - मैं इस तरह के प्रयोजन के लिए महान उपकरण का उपयोग करने का सुझाव देते हैं - 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 में जीमेल अभी भी समर्थन 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: टीएलएस उर्फ ​​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. 

मैं कर दिया गया है बिना किसी समस्या के पिछले 5 वर्षों के लिए जीमेल के माध्यम से नागोस से ईमेल अधिसूचनाएं भेजने के लिए स्वैक्स का उपयोग करना।

2

मौजूदा उत्तरों के आधार पर, पासवर्ड का खुलासा किए बिना, कमांड लाइन से, जीमेल खाते का उपयोग करके, एसएमटीपी पर स्वचालित ई-मेल भेजने के लिए एक चरण-दर-चरण मार्गदर्शिका है।

आवश्यकताओं

पहले, स्थापित निम्नलिखित सॉफ्टवेयर संकुल:

ये निर्देश, एक लिनक्स ऑपरेटिंग सिस्टम मान लेकिन उचित होना चाहिए विंडोज़ के लिए पोर्ट के लिए आसान (सिगविन या देशी समकक्षों के माध्यम से), या अन्य ऑपरेटिंग सिस्टम।

प्रमाणीकरण

सहेजें 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): [email protected] 
Password (hidden): 
AGJvYkBnbWFpbC5jb20AYm9iaXN0aGViZXN0cGVyc29uZXZlcg== 

कॉपी आखिरी पंक्ति (AGJ...==) के रूप में इस प्रमाणीकरण के लिए उपयोग किया जाएगा: कुछ इस तरह दिखेगा।

अधिसूचना

सहेजें निम्नलिखित notify.sh के रूप में स्क्रिप्ट की उम्मीद (ध्यान दें पहली पंक्ति की उम्मीद कार्यक्रम को संदर्भित करता है): YOUR_AUTHENTICATION_CODE से अधिक

  1. पेस्ट के साथ:

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

    निम्नलिखित परिवर्तन करें प्रमाणीकरण स्क्रिप्ट द्वारा उत्पन्न प्रमाणीकरण कोड।

  2. प्रमाणीकरण कोड उत्पन्न करने के लिए उपयोग किए गए ई-मेल पते के साथ YOUR_EMAIL_ADDRESS बदलें।
  3. फ़ाइल को सहेजें।
उदाहरण के लिए

(कोण कोष्ठक ई-मेल पते के लिए रखा जाता है पर ध्यान दें):

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

अन्त में, सूचित स्क्रिप्ट निष्पादन योग्य के रूप में निम्नानुसार हैं:

chmod +x notify.sh 

संदेश ई मेल इस प्रकार

कमांड लाइन से एक ई-मेल भेजें:

./notify.sh [email protected] "Command Line" "March 14" "15:52" 
संबंधित मुद्दे

 संबंधित मुद्दे