SMTP Inside Out

Cách internet email hoạt động

Đã bao giờ bạn tự hỏi điều gì xảy ra khi bạn nhấn nút Gửi trong chương trình email của bạn? Có lẽ là không, tôi đoán - miễn là nó hoạt động. Đây chính là lý do tại sao bạn nên tự hỏi, mặc dù. Trong trường hợp một cái gì đó không làm việc nó là tốt để biết những gì không hoạt động. Thông thường, đó là một nửa giải pháp.

Khi bạn gửi email SMTP đi vào chơi. SMTP là viết tắt của Simple Mail Transfer Protocol như được định nghĩa trong RFC 5321: Giao thức chuyển thư đơn giản. Ứng dụng thư của bạn trao đổi với máy chủ SMTP bằng quy trình đơn giản và đơn giản này để nhận email từ địa điểm này đến địa điểm khác.

Sự tán tỉnh

Chương trình email của bạn trở thành một máy khách SMTP , kết nối với cổng 25 của máy chủ thư của bạn (thường là cổng SMTP ) và - nói EHLO . Máy tính, cuối cùng, chỉ là con người và những gì đếm là nó muốn được lịch sự. Trên thực tế, nó không cố gắng lịch sự nhưng để sử dụng các bổ sung sau này cho SMTP đã mang lại hai hương vị của lệnh HELO sau này (lệnh SMTP thường bao gồm bốn ký tự).

Hai hương vị của HELO

EHLO, là phiên bản mới hơn làm cho máy chủ quảng cáo tất cả các tính năng bổ sung (chẳng hạn như thông báo trạng thái gửi hoặc khả năng truyền tải các thư có chứa khác với các ký tự ASCII an toàn) mà nó hỗ trợ.

Không phải mọi máy chủ đều cho phép lời chào này, nhưng nó được yêu cầu chấp nhận một HELO đơn giản mà tự nhiên giả định rằng không có các tính năng bổ sung nào có mặt. Cả hai lệnh hello đều yêu cầu client chỉ định miền của nó sau ** LO, tuy nhiên. Trong thực tế, điều này trông giống như:

220 mail.domain.net Máy chủ ESMTP
HELO
501 HELO yêu cầu địa chỉ miền
HELO localhost
250 mail.domain.net Xin chào localhost [127.0.0.1], rất vui được gặp bạn

(Đầu vào của tôi là in nghiêng , đầu ra của máy chủ là màu đen; dòng bắt đầu bằng dấu 5 cho biết lỗi .)

Người gửi

Phần còn lại của giao thức thực sự xứng đáng với thuộc tính đơn giản. Nếu bạn muốn gửi một email, bạn bắt đầu với các từ khóa MAIL FROM:. Sau đây là địa chỉ email của người gửi, như được gợi ý bởi từ. Đừng quên đặt các dấu ngoặc xung quanh địa chỉ, mặc dù (như ). Tiếp tục ví dụ của chúng tôi, chúng tôi có:

MAIL FROM:
250 sender@example.com ... Người gửi ok

Người nhận

Sau khi máy chủ chấp nhận địa chỉ của người gửi, khách hàng có thể cung cấp địa chỉ của người nhận. Lệnh cho hành động này, RCPT TO: một lần nữa là khá khêu gợi. Tôi muốn gửi thư cho chính tôi :

RCPT TO: recipient@example.com
250 support@lifewireguide.com ... Người nhận ok (sẽ xếp hàng)

Rằng máy chủ sẽ xếp hàng có nghĩa là: nó sẽ lưu thư cục bộ và gửi nó cùng với tất cả các thư được xếp hàng đợi khác trong khoảng thời gian (ví dụ, cứ sau 30 phút). Hành vi này phụ thuộc vào cấu hình và máy chủ cũng có thể gửi thư ngay lập tức.

Chúng ta gần xong rồi. Tuy nhiên, điều còn thiếu là phần quan trọng: thông điệp thực tế.

Thông điệp

Giờ đây, "phong bì" đã hoàn tất, dữ liệu của thông điệp email giống như nó có thể theo sau. "Dữ liệu" này bao gồm nội dung của email cũng như các trường tiêu đề .

Lệnh để khởi tạo trạng thái làm cho máy chủ chấp nhận thông báo là DATA . Sau đây là tất cả các trường tiêu đề của thông báo email và sau đó là nội dung, cả hai chỉ chiếm một khối văn bản lớn (hoặc dữ liệu). Để báo cho máy chủ biết rằng đầu vào đã hoàn tất, một dấu chấm trên một dòng được sử dụng (\ r \ n. \ R \ n). Vì vậy, tôi gửi tin nhắn của tôi:

DỮ LIỆU
354 Nhập thư, kết thúc bằng "." trên một dòng của chính nó
ID thư:
Ngày: CN, ngày 17 tháng 8 năm 1997 18:48:15 +0200
Từ: Heinz Tschabitscher
Kính gửi: Heinz Tschabitscher
Chủ đề: Đối với cuộc thi Summarize-Proust

Tắt đến Swan's World!
.
250 SAA19153 Tin nhắn được chấp nhận để giao hàng

Có, điều này có nghĩa là bạn có thể nêu tên hoàn toàn khác với tên mà email đến trong trường Đến :. Ví dụ: bạn có thể sử dụng " Danh sách người nhận bị chặn" .

Kết thúc

Bây giờ bạn có thể gửi bao nhiêu email như bạn muốn lặp lại các bước từ MAIL FROM: to . . Nếu bạn đã làm xong, bạn có thể thoát khỏi máy chủ bằng lệnh QUIT và đó chỉ là những gì chúng ta làm:

QUIT
221 Tạm biệt

Tôi có thể làm cái này như thế nào?

Giải pháp không tầm thường là telnet đến máy chủ thư đi của bạn (bạn có thể tìm thấy địa chỉ của nó trong cài đặt tài khoản của ứng dụng email của bạn) trên cổng 25.

Cách dễ dàng hơn là sử dụng Java applet này , nó sẽ cố bắt chước giao thức SMTP và hướng dẫn bạn qua hộp thoại.