ارسال ایمیل با خط فرمان در آردوینو

Ratings
(0)

با اینکه ایمیل یک سرویس مهم است، تعداد کمی از مردم می دانند که آن در پشت صحنه چگونه کار می کند.

برای ارسال ایمیل از آردوینو، ما مسیر ساده ای را انتخاب می کنیم و از یک رایانه بعنوان پردازشگر ایمیل استفاده می کنیم؛ همان طور که در اواسط مقاله ی ثبت یک اپلیکیشن در توییتر با آردوینو، یعنی در بخش توییت کردن پیغام ها با استفاده از Processing آموزش داده شد.
ما مانند هکرهای واقعی، یک مسیر پیچیده تر را دنبال می کنیم و زیرمجموعه ای از پروتکل ساده انتقال ایمیل(SMTP مخفف Simple Mail Transfer Protocol) را پیاده سازی می کنیم. SMTP یک پروتکل یا قرارداد اینترنتی معمولی است. و تنها از متن ها استفاده می کند و مبتنی بر خط(linebased) است و ما به صورت خط به خط به تبادل اطلاعات در آن می پردازیم.

یک ایمیل معمولی(typical) تنها شامل چند خصوصیت زیر است:

  1. یک ارسال کننده
  2. یک دریافت کننده
  3. یک موضوع
  4. یک بدنه ی پیغام

برای ارسال یک ایمیل، ما باید یک درخواست را به یک سرور SMTP ارسال کنیم. این درخواست باید به مشخصات SMTP پایبند باشد. قبل از اینکه ما با استفاده از یک برد آؤدوینو و یک شیلد اترنت، یک ایمیل را ارسال کنیم، باید یاد بگیریم که یک ایمیل را از یک خط فرمان(command line) با استفاده از فرمان telnet ارسال کنیم.

برای انجام این کار، باید یک سرور SMTP پیدا کنیم که به ما امکان دهد تا ایمیل ارسال کنیم. اما انجام این کار، به این سادگی ها نیست.

مسئله ی اصلی این است که در طول این سال ها، سرورهای SMTP در تشخیص پیغام های هرزنامه، بسیار خوب عمل می کنند. و اغلب، ما نمی توانیم به صورت دستی با استفاده از سشن telnet یک ایمیل ارسال کنیم؛ زیرا سرور SMTP فکر می کند که این یک هرزنامه است. اما در نهایت به این پیغام می رسیم که: ایمیل شما ارسال نخواهد شد.

همچنین، بیشتر سرورهای SMTP امروزی، به اتصالات رمزگذاری شده اصرار دارند که چیز خوبی است. اما پیاده سازی الگوریتم های رمزنگاری روی یک آردوینو، نسبتاً سخت است و از منابع فراوانی استفاده می کند. بنابراین حتی اگر به سرور SMTP ارائه دهنده ی ایمیل خود دسترسی داشته باشیم، وقتی که سعی کنیم از آن برای ارسال ایمیل از آردوینو استفاده کنیم، با مشکلات بزرگی مواجه خواهیم شد.

 برای غلبه بر این مشکلات، می توانید از یک سرویس خاص SMTP مثل SMTP2GO استفاده کنید. اکثر این سرویس ها، از اتصالات رمزگذاری نشده پشتیبانی می کنند و دسترسی را به هیچ وجه محدود نمی کنند. البته اگر تعداد ایمیل های ارسالی به حد خاصی برسد، ما باید برای استفاده از این سرویس پول پرداخت کنیم. اکثر این سرویس ها، یک اکانت مجانی دارند که به ما امکان می دهد تا تعدادی ایمیل را در روز یا در ماه ارسال کنیم. در زمان نوشتن این بخش از کتاب، سرویس SMTP2GO به ما امکان می دهد تا 20 ایمیل را به صورت مجانی، در روز ارسال کنیم. اگر دزدگیر شما در روز بیش از 20 ایمیل ارسال می کند، باید به فکر رفتن به یک محله ی جدید باشید!

برای دنبال کردن مثال های ایمیل این فصل، توصیه می کنیم که از یک اکانت مجانی سرویس SMTP مانند SMTP2GO استفاده کنید. اگر شما از قبل به یک سرور SMTP نامحدود دسترسی دارید، می توانید از آن استفاده کنید. سشن telnet زیر، به ما نشان می دهد که چگونه با استفاده از SMTP2GO یک ایمیل ارسال کنیم:

کدها:

maik> telnet smtpcorp.com 2525
Trying 207.58.147.66...
Connected to smtpcorp.com.
Escape character is '^]'.
220 smtpcorp.com ESMTP Exim 4.80 Sun, 01 Jun 2014 18:22:28 +0000
EHLO
250-smtpcorp.com Hello dslb-088-077-003-169.pools.example.net [88.77.3.169]
250-SIZE 52428800
250-8BITMIME
250-PIPELINING
250-AUTH CRAM-MD5 PLAIN LOGIN
250-STARTTLS
250 HELP
AUTH LOGIN
334 VXNlcm5hbWU6
bm90bXl1c2VybmFtZQ==
334 UGFzc3dvcmQ6
bm90bXlwYXNzd29yZA==
235 Authentication succeeded
MAIL FROM:<این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید>
250 OK
RCPT TO:<این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید>
250 Accepted <این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید>
DATA
354 Enter message, ending with "." on a line by itself
from:این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید
to:این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید
subject:This is a test
Really, it is a test!
.
250 OK id=1WrAQ9-4gfLuZ-5U
QUIT
221 smtpcorp.com closing connection
Connection closed by foreign host.

 با اینکه این کدها پیچیده تر است، این سشن مشابه با مثال Daytime است که ما تنها از فرمان های پیچیده تری در آن استفاده کردیم( به هر حال، ما مجبور نیستیم فرمان ها را با حروف بزرگ بنویسیم). لطفاً توجه کنید که ما داریم به پورت 2525 متصل می شویم که پورت استاندارد SMTP (یعنی 25) نیست. برای مشاهده اینکه باید از چه پورتی استفاده کنید، وب سایت ارائه دهنده خدمات SMTP خود را بررسی کنید.

ما از دستور EHLO استفاده می کنیم تا به سرور SMTP بگوییم که مایلیم از یک نسخه کمتر توسعه یافته SMTP استفاده کنیم که از احراز هویت پشتیبانی می کند.

پس از آن، ما فرمان AUTH LOGIN را ارسال می کنیم تا به سرور SMTP بگوییم که مایلیم username و password را ارسال کنیم. سپس سرور SMTP رشته ی VXNlcm5hbWU6 را برمی گرداند. این رشته در ابتدا کمی عجیب به نظر می رسد اما این تنها رشته ی ":Username" است که با استفاده از Base64 (بیس 64) رمزگذاری شده است. با رفتن به این آدرس، می توانید متن را به بیس 64 تبدیل کنید.

سپس ما username خود را ارسال می کنیم و آن را هم با Base64 رمزگذاری می کنیم. پاسخ سرور SMTP عبارت UGFzc3dvcmQ6 یعنی رشته ی “:Password” است؛ بنابراین ما پسورد خود را (که با بیس 64 رمزگذاری شده است) ارسال می کنیم.

توجه کنید که با اینکه Base64 به نظر رمز آلود می رسد، اما به هیچ وجه رمزگذاری شده نیست. بیس 64، به همان اندازه ناامن است که یک متن ساده ناامن است و برنامه نویسان نرم افزاری وجود دارند که می توانند بیس 64 را به سرعت خواندن یک متن عادی، بخوانند.

ما می توانیم بی شمار تبدیل کننده ی بیس 64 را در اینترنت پیدا کنیم و برای بیس 64، یک کتابخانه وجود دارد که تقریباً برای تمام زبان های برنامه نویسی قابل استفاده است. پس از احراز هویت با موفقیت انجام شد، ما به سرور می گوییم که می خواهیم یک ایمیل را با استفاده از (دستور) :MAIL FROM ارسال کنیم. آدرس ایمیلی که ما با این فرمان ارائه می دهیم در مواردی که ایمیل ما توسط سرور برگشت بخورد، مورد استفاده قرار می گیرد.

توجه کنید که این سرور، یک خط را بعنوان پاسخ برای هر درخواست برمی گرداند. این درخواست ها همواره با یک کد وضعیت سه رقمی شروع می شوند. فرمان :RCPT TO آدرس ایمیل گیرنده را تنظیم می کند. اگر می خواهید یک ایمیل را به بیش از یک گیرنده ارسال کنید، باید این فرمان را برای هر یک از آنها تکرار کنید.

با استفاده از فرمان DATA، به سرور می گوییم که اکنون می خواهیم شروع به انتقال خصوصیت های ایمیل کنیم. خصوصیت های ایمیل عمدتاً یک لیست از جفت های کلید/مقدار(key/value) هستند به طوری که کلید(key) و مقدار(value) توسط یک علامت دونقطه از هم جدا شده اند. بنابراین، در سه خط کد اول، ما خصوصیت from و to و subject را تنظیم می کنیم و همه ی آنها مشخص کننده ی چیزهایی هستند که ما به هنگام ارسال یک ایمیل انتطار داریم.

ما بدنه ی ایمیل را با استفاده از یک خط خالی از خصوصیت ها(attributes) جدا می کنیم. برای علامت گذاری انتهای بدنه ی ایمیل، یک خط ارسال کنید که حاوی یک علامت نقطه باشد. برای پایان دادن به سشن با استفاده از سرور SMTP، فرمان QUIT را ارسال کنید. اکنون ما باید در صندوق ورودی(inbox) ایمیل خود یا در پوشه ی هرزنامه(spam)، یک ایمیل جدید را مشاهده کنیم. اگر چنین نشد، سعی کنید در ابتدا از یک سرور SMTP دیگر استفاده کنید. 

 همچنان ممکن است اشتباهی پیش آید، و اگرچه ارسال ایمیل با SMTP در تئوری ساده است، اما می تواند بسیار پیچیده باشد. سرورهای SMTP اغلب پیغام های خطای مفیدی را برمی گردانند که ممکن است به ما کمک کند تا به سرعت مشکل خود را حل کنیم. اگر می خواهید سرور SMTP خود را آزمایش کنید، ابتدا باید آدرس آن را بفهمید. برای این کار، یک ترمینال را باز کنید و از کدهای زیر در آن استفاده کنید:

کد شماره 2

maik> nslookup
> set type=mx
> gmail.com
Server: 192.168.2.1
Address: 192.168.2.1#53
Non-authoritative answer:
gmail.com mail exchanger = 5 gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 10 alt1.gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 20 alt2.gmail-smtp-in.
> exit

این فرمان، یک لیست از تمام سرورهای تبادل ایمیل(MX) که به دامنه ی gmail.com تعلق دارند و برای شبکه شما در دسترس هستند را برمی گرداند(آن را با دامنه ی ارائه دهنده ایمیل خود جایگزین کنید). در این مورد، تمام سرورها به ایمیل گوگل(جی میل) تعلق دارند و نمی توانیم از آنها برای ارسال ایمیل از آردوینوی خود استفاده کنیم، زیرا زیرا ایمیل گوگل به استفاده از اتصالات رمزنگاری شده اصرار دارد. در صورتی که ارائه دهنده ایمیل شما محدودیت کمتری دارد، می توانید بدون احراز هویت و بدون هیچ رمزنگاری، سعی کنید یک ایمیل را ارسال کنید. بنابراین یک اتصال به پورت استاندارد 25 ، SMTP باز کنید و نام سرور را با smtp.example.com جایگزین کنید و طبق سشن تلنت زیر، تمام آدرس های ایمیل را اضافه کنید:

کد شماره 3

maik> telnet smtp.example.com 25
Trying 93.184.216.119...
Connected to smtp.example.com.
Escape character is '^]'.
220 mx.example.com ESMTP q43si10820020eeh.100
HELO
250 mx.example.com at your service
MAIL FROM: <این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید>
250 2.1.0 OK q43si10820020eeh.100
RCPT TO: <این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید>
250 2.1.5 OK q43si10820020eeh.100
DATA
354 Go ahead q43si10820020eeh.100
from: این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید
to: این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید
subject: This is a test
Really, this is a test!
.
250 2.0.0 OK 1286819789 q43si10820020eeh.100
QUIT
221 2.0.0 closing connection q43si10820020eeh.100
Connection closed by foreign host.

 در اینجا، ما از فرمان HELO (به همین نحو) برای مشخص کردن یک سشن با سرور SMTP که به اطلاعات احراز هویت نیاز ندارد استفاده کرده ایم. بقیه ی کدها، دقیقاً مانند مثال قبلی است. گاهی اوقات ما باید قبل از اینکه بتوانیم یک ایمیل را از خط فرمان خود ارسال کنیم، چند چیز را امتحان کنیم. تا موفق نشده اید به کار خود ادامه دهید، زیرا ارسال ایمیل از خط فرمان، اساس بخش بعدی را تشکیل می دهد به طوری که یاد می گیریم چگونه ایمیل ها را با یک آردوینو ارسال کنیم.

 

  • بازدید: 406

نوشتن دیدگاه

لطفا نظرات خود را بیان کنید. به سوالات در سریع ترین زمان پاسخ داده خواهد شد.اما به نکات زیر توجه کنید:
1. سعی کنید نظرات شما مرتبط با مقاله ی مورد نظر باشد، در غیر این صورت پاسخ داده نخواهد شد.
2. سوالات خود را به صورت کوتاه بیان کنید و از پرسیدن چند سوال به طور همزمان خودداری کنید.
3. سوال خود را به طور واضح بیان کنید و از کلمات مبهم استفاده نکنید.

ارسال