Download presentation
Presentation is loading. Please wait.
1
第7回ネットワークプログラミング 中村 修
2
今日のお題 講義 ---------休憩--------------------------------
SMTPプロトコル 練習1: telnetを用いてSMTPを体験しよう 練習2: smtp clientを書こう 休憩 実習: smtp clientをかっこよくする 練習1で書いたコードを改造して、いろいろな機能を付加しよう。
3
SMTP (RFC821) Simple Mail Transfer Protocol 電子メールの配信に用いられるプロトコル
TCP 25番ポート 送信リクエスト入力 (あて先、本文 etc) センダ レシーバ センダ レシーバ 人 SMTPサーバ (mail.sfc.keio.ac.jp) SMTPサーバ (sfc.wide.ad.jp) ファイル へ書き込み SMTPクライアント SMTP SMTP インターネット ファイルシステム SMTPクライアント(メールクライアント)は SMTPサーバ(メールサーバ)にアクセスすれば 後はサーバ間で自動的に配信してくれる 但し、運用上IPアドレスによる制限をかける場合が多い
4
メッセージフォーマット: RFC822 ヘッダとボディの二つの部分からなる 二つの部分の区別は「空行」 ヘッダ ボディ 例:
送信の日付(Date)、宛先(To、Cc)、件名(Subject)、送信者アドレス(From) などメッセージの属性に当たる情報を記載する部分 ボディ 本文を記載する部分 二つの部分の区別は「空行」 例: From: Masaki Minami Date: Fri, 30 May :36: To: Subject: Alphabet Only Cc: X-Mailer: MyMailClient v0.01
5
SMTPの書式 コマンド<スペース>引数<改行> 例:HELO sfc.keio.ac.jp
但し:<改行は>CR+LF なので、コード中では \r\nで表記 例:HELO sfc.keio.ac.jp
6
SMTPのコマンド(1) HELO MAIL RCPT センダがレシーバにセンダ側のホスト名を伝える
例: HELO zux000.sfc.keio.ac.jp MAIL センダが送ろうとしている送信者のメールアドレスをレシーバに伝える 例: MAIL FROM: RCPT 受信者のメールアドレスをレシーバに伝える 1つのメッセージに対して100まで指定可能 連続する場合にはRCPT TO: のような行は複数にわたって発行する 例: RCPT TO: RCPT TO:
7
SMTPのコマンド(2) DATA ヘッダ・本文の送信開始を伝える メッセージ終了は「 . 」(ピリオド)のみの行を送信することで伝えられる
「 . 」(ピリオド)で始まる行がある場合には、センダ側でもう一つ「 . 」を挿入しなければいけない 例: DATA To: Subject: Test ここから本文…. .
8
SMTPのコマンド(3) QUIT NOOP RSET SMTPコネクションを終了 何もしない
処理中のトランザクションを破棄(レシーバ側を初期化) DATAコマンドを発行する前まで有効 1回のSMTPコネクションで複数のメールを送信する際に利用
9
SMTPのリプライコード 3桁の数字で始まる文字列が各コマンド毎に必ず返信される 2xx 3xx 4xx、5xx
メールクライアントはこのコードで次の処理を考えなければならない メールサーバは状況にあわせて最低限でもこの3桁の数字だけはメールクライアントに返さなければならない 2xx 成功した場合には「2」で始まる3桁の数字を返す 3xx DATAコマンドでメッセージ入力OKの意味(継続可を意味) 4xx、5xx 失敗またはエラーの場合
10
SMTP状態遷移 接続待ちうけ connect 接続確立 HELO MAIL FROM待ち受け MAIL FROM RCPT TO待ちうけ
ヘッダ情報入力モード:DATA待ちうけ DATA 本文入力モード:QUIT待ちうけ QUIT 終了
11
練習1: SMTPを話してみよう! 挨拶 コマンドラインでメールを送る SMTPポートにアクセス 送信者の決定 受信者の決定
練習1: SMTPを話してみよう! コマンドラインでメールを送る SMTPポートにアクセス ex. telnet 挨拶 HELO hoge.net 送信者の決定 ex. MAIL FROM: 受信者の決定 ex. RCPT TO: メールの内容を開始 ex. DATA メールの内容を終了 ex. . メールの送信 ex. QUIT
12
練習2: メールクライアントの雛形 コピーしてコンパイルして使って、読んでみよう。
練習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フィールドなど追加 複数の宛先にメールを送るには?
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.