1 / 14

第 7 回ネットワークプログラミング

第 7 回ネットワークプログラミング. 中村 修. 今日のお題. 講義 SMTP プロトコル 練習 1 : telnet を用いて SMTP を体験しよう 練習 2 : smtp client を書こう --------- 休憩 -------------------------------- 実習: smtp client をかっこよくする 練習 1 で書いたコードを改造して、いろいろな機能を付加しよう。. SMTP サーバ (mail.sfc.keio.ac.jp). SMTP サーバ (sfc.wide.ad.jp). 人. センダ. センダ.

nelson
Download Presentation

第 7 回ネットワークプログラミング

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第7回ネットワークプログラミング 中村 修

  2. 今日のお題 • 講義 • SMTPプロトコル • 練習1: telnetを用いてSMTPを体験しよう • 練習2: smtp clientを書こう ---------休憩-------------------------------- • 実習: smtp clientをかっこよくする • 練習1で書いたコードを改造して、いろいろな機能を付加しよう。

  3. SMTPサーバ (mail.sfc.keio.ac.jp) SMTPサーバ (sfc.wide.ad.jp) 人 センダ センダ レシーバ レシーバ SMTPクライアント SMTP SMTP ファイルシステム SMTP(RFC821) • Simple Mail Transfer Protocol • 電子メールの配信に用いられるプロトコル • TCP 25番ポート 送信リクエスト入力 (あて先、本文 etc) ファイル へ書き込み インターネット SMTPクライアント(メールクライアント)は SMTPサーバ(メールサーバ)にアクセスすれば 後はサーバ間で自動的に配信してくれる 但し、運用上IPアドレスによる制限をかける場合が多い

  4. メッセージフォーマット: RFC822 • ヘッダとボディの二つの部分からなる • ヘッダ • 送信の日付(Date)、宛先(To、Cc)、件名(Subject)、送信者アドレス(From) などメッセージの属性に当たる情報を記載する部分 • ボディ • 本文を記載する部分 • 二つの部分の区別は「空行」 • 例: From: Masaki Minami minami@wide.ad.jp Date: Fri, 30 May 2003 02:36:27 +0900 To: masaki@minami.org Subject: Alphabet Only Cc: np-staff@minami.org X-Mailer: MyMailClient v0.01

  5. SMTPの書式 • コマンド<スペース>引数<改行> • 但し:<改行は>CR+LF • なので、コード中では \r\nで表記 • 例:HELO sfc.keio.ac.jp

  6. SMTPのコマンド(1) • HELO • センダがレシーバにセンダ側のホスト名を伝える • 例:  HELO zux000.sfc.keio.ac.jp • MAIL • センダが送ろうとしている送信者のメールアドレスをレシーバに伝える • 例:   MAIL FROM: osamu@sfc.keio.ac.jp • RCPT • 受信者のメールアドレスをレシーバに伝える • 1つのメッセージに対して100まで指定可能 • 連続する場合にはRCPT TO: foo@bar.net のような行は複数にわたって発行する • 例:   RCPT TO: kaizaki@sfc.keio.ac.jp RCPT TO: irino@sfc.keio.ac.jp

  7. SMTPのコマンド(2) • DATA • ヘッダ・本文の送信開始を伝える • メッセージ終了は「 . 」(ピリオド)のみの行を送信することで伝えられる • 「 . 」(ピリオド)で始まる行がある場合には、センダ側でもう一つ「 . 」を挿入しなければいけない • 例:  DATA To: osamu@sfc.keio.ac.jp Subject: Test ここから本文…. .

  8. SMTPのコマンド(3) • QUIT • SMTPコネクションを終了 • NOOP • 何もしない • RSET • 処理中のトランザクションを破棄(レシーバ側を初期化) • DATAコマンドを発行する前まで有効 • 1回のSMTPコネクションで複数のメールを送信する際に利用

  9. SMTPのリプライコード • 3桁の数字で始まる文字列が各コマンド毎に必ず返信される • メールクライアントはこのコードで次の処理を考えなければならない • メールサーバは状況にあわせて最低限でもこの3桁の数字だけはメールクライアントに返さなければならない • 2xx • 成功した場合には「2」で始まる3桁の数字を返す • 3xx • DATAコマンドでメッセージ入力OKの意味(継続可を意味) • 4xx、5xx • 失敗またはエラーの場合

  10. SMTP状態遷移 接続待ちうけ connect 接続確立 HELO MAIL FROM待ち受け MAIL FROM RCPT TO待ちうけ RCPT TO ヘッダ情報入力モード:DATA待ちうけ DATA 本文入力モード:QUIT待ちうけ QUIT 終了

  11. 練習1: SMTPを話してみよう! • コマンドラインでメールを送る • SMTPポートにアクセス • ex. telnet 133.27.4.120 25 • 挨拶 • HELO hoge.net • 送信者の決定 • ex. MAIL FROM: hoge@hoge.net • 受信者の決定 • ex. RCPT TO: kaizaki@sfc.keio.ac.jp • メールの内容を開始 • ex. DATA • メールの内容を終了 • ex. . • メールの送信 • ex. QUIT

  12. 練習2: メールクライアントの雛形 • コピーしてコンパイルして使って、読んでみよう。 • 推奨ホスト:zux???.sfc.keio.ac.jp • ソースコード中のメールアドレスを自分のメールアドレスに変更しよう • コードは以下にあります /home/kaizaki/osamuNP/7/smtpclient_sample.c

  13. 練習2:ポイント connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)); strnum = sizeof(sendmessage) / sizeof(char *) ; for (i = 0; i < strnum; i++){ if( write(sockfd, sendmessage[i], strlen(sendmessage[i])) < 0){ perror("write()"); continue; } }

  14. 実習:SMTPクライアント作成 • 練習2のsmtpクライアントは最低限の機能しかありません。 • 改造して格好よくしましょう。 • 必須事項 • MAIL FROM, RCPTなどコマンドラインから入力 • SUBJECTなど入力できるように • オプション • 本文をファイルから読み込む • IPv6でも使える • X-MAILERフィールドなど追加 • 複数の宛先にメールを送るには?

More Related