

[SPAM拒否] [IM]
ネットワーク メール/SMTP編
Last update
- SMTPと、新しいメールサーバの作成
- 新しいメールプロトコルの作成、メッセンジャーとの統合
この2つを目標にいろいろやってみようかと思います。 最近またまた活動再会?
参考
SMTPという名のメール送信
いろいろ文字コードや添付ファイルなど複雑なおまけがついているのがメールのプロトコルSMTPです。
基本的なところはどんなかな。
基本的にはこんな感じ ( > 送信側 < 受信側 )
< 220 受信サーバの名乗り ESMTP なんて書かれてることもある
> HELO メールサーバの名前 EHLO もある
< 応答 (ESMTPの場合はコマンドリスト)
{
> MAIL FROM:送信者
< 応答
> RCPT TO:受信者 ( 1行1アドレス 100個まで繰り返し可)
< 応答
> DATA
< 3xx 応答 終了は <CR><LF>.<CR><LF>
> ヘッダ内容
> 空行
> 本文
> .
< 応答
}
> QUIT (QUITしないで続けてMAILから?送信することも可)
表 SMTPコマンド一覧
| コマンド |
書式 |
意味 |
| HELO |
HELO ドメイン |
旧接続の確立(必須) |
| EHLO |
EHLO ドメイン |
接続の確立(必須) |
| MAIL |
MAIL FROM:アドレス |
発信者の指定(必須) |
| RCPT |
RCPT TO:アドレス |
受信者の指定 100行まで(必須) |
| DATA |
DATA |
本文の送信(必須) |
| RSET |
RSET |
中断 |
| SEND |
SEND FROM:アドレス |
発信者の指定
利用者の端末まで届ける |
| SOML |
|
発信者の指定
端末またはメールBOXへ届ける |
| SAML |
|
発信者の指定
端末とメールBOXへ届ける |
| VRFY |
EXPN 文字列 |
受信者の確認 |
| EXPN |
EXPN 文字列 |
メーリングリスト会員アドレス要求 |
| HELP |
|
ヘルプメッセージ要求 |
| NOOP |
|
ダミー |
| QUIT |
|
処理の終了 |
| TURN |
TURN |
クライアント/サーバ役割反転 |
| AUTH |
|
認証 RFC2554で拡張 |
SMTP応答コード
| コード | 意味 |
| 2xx | 正常 |
| 3xx | 入力開始? |
| 4xx | エラー |
| 5xx | エラー |
Javaには、mail(MUA)用のAPIが用意されていますが、独自に作ることももちろん可能です。MUAだけでなくMTA、MDA、MLMも作れます。
しかし、作る場合は正しく作らないとメールのループなど大変なことになってしまう場合があるので注意しましょう。
EHLOとQUITが、SMTPサーバと接続するためのコマンドで、MAILからDATAまでのセットはくりかえして使うことができます。MAILで新メールのセッションが開始されますが、DATAの次に何かコマンドを追加できるかどうかは、RFCを見てください。
メールサーバにはどのようなものがあるか
UNIX上で動作するサールサーバ(MTA/MDA)の一般的なもので、次のようなものがあります。
この内、sendmail は設定が複雑で、Postfixやqmail に移行しているところが多いです。
MLM メーリングリストシステムの開発
Majavdomo
というメーリングリストが開発されています。
他にも、fml、Majordomoなどは非常に多く利用されています。
参考
- RFC1652 8BITMIME
- RFC1869->RFC2821 ESMTP拡張
- RFC1891 DSN
- RFC1985 ETRN
- RFC1521/1522/1590 -> RFC2045/2046/2047/2048/2049 MIME
- RFC2045 MIME Part 1 インターネットメッセージボディ
- RFC2046 多目的インターネットメール拡張(MIME) 第2部 メディア型 (JIS TS X0070)
- RFC2047 MIME Part 3 メッセージヘッダでの非ASCIIテキスト "B" encoding と "Q" encoding
(JIS TS X 0071 多目的インターネットメール拡張(MIME) 第3部:非ASCIIテキストへのメッセージヘッダ拡張)
- RFC2554 SMTP-AUTH
- RFC2920 PIPELINING
- RFC3030 BINARYMIME
- RFC2234 ABNF 拡張BNF表記
- http://www02.so-net.ne.jp/~hat/mailer/rfc.ja.html
書籍
配信システム
SMTP関連
- RFC 5504 実験 国際化電子メールアドレスの互換性の仕組み
- RFC 5337 実験 国際化配信状態(DSN)、開封確認通知
- RFC 5336 実験 国際化メールアドレスのためのSMTP拡張
- RFC 5335 実験 国際化メールヘッダ
- RFC 5321 標準 SMTPは RFC 2821, RFC 821の改定 SMTP (STD 10)
HTML訳 TEXT訳
- RFC 5064 標準
- RFC 4954 標準 認証のためのSMTPサービス拡張 (SMTP AUTH) 2554廃止
- RFC 4952 情報 国際化電子メールの概要とフレームワーク
- RFC 4871 標準 DKIM署名
- RFC 4870 歴史 DomainKeys (4871により廃止)
- RFC 4865 標準 SMTP Submission Service Extension for Future Message Release
- RFC 4686 情報 DKIM
- RFC 4409 標準 サブミッションポート? 587
- RFC 4408 実験 Sender Policy Framework (SPF) Version 1
- RFC 4407 実験 Purported Responsible Address in E-Mail Messages
- RFC 4406 実験 Sender ID
- RFC 4405 実験
- RFC 3464 標準 拡張可能なメッセージフォーマット for DSN 1894を廃止
- RFC 3463 標準 改良メールシステムステータスコード (DSN) RFC4865により更新
- RFC 3462 標準 DSN
- RFC 3461 標準 DSN
- RFC 3207 標準 SMTP サービス拡張 for Secure SMTP over TLS
- RFC 3030 標準 SMTPサービス拡張 for 大きいバイナリMIMEメッセージ
- RFC 2920 標準 STD 60 SMTPサービス拡張 for コマンドパイプライン
- RFC 2852 標準 Deliver By SMTP RFC1894を更新
- RFC 2821 歴史 RFC 5321により廃止
- RFC 2554 歴史 RFC 4954により廃止
- RFC 2487 歴史 RFC 3207により廃止
- RFC 2476 歴史 RFC 4409により廃止
- RFC 2298 開封通知
- RFC 2197 歴史 RFC 2920により廃止
- RFC 2193
- RFC 2060 歴史 RFC 3501により廃止
- RFC 2034 標準 SMTPサービス拡張 DSN的な
- RFC 1891 - 1894
- RFC 1894 歴史 RFC 3464により廃止 拡張可能なメッセージフォーマット for DSN
- RFC 1893 歴史 RFC 3463により廃止
- RFC 1892 歴史 RFC 3462により廃止
- RFC 1891 歴史 RFC 3461により廃止
- RFC 1870 SMTPサービス拡張 for Message Size Declaration
- RFC 1869 SMTPサービス拡張
- RFC 1854 歴史 RFC 2197により廃止
- RFC 1830 歴史 RFC 3030により廃止
- RFC 1730 歴史 RFC 2060により廃止
- RFC 1653 歴史 RFC 1870により廃止
- RFC 1652 標準 8bit-MIME ESMTP
- RFC 1651 歴史 RFC 1869により廃止
- RFC 1426 歴史
- RFC 1425 SMTPサービス拡張
- RFC 1123 Requirements for Internet Hosts -- Application and Support RFC 5321で一部更新
- RFC 1047 メッセージの重複とSMTP
- RFC 974 歴史 RFC 2821 MX(STD14)により廃止
- RFC 821 歴史 RFC 2821により廃止
ネットニュース
- RFC 3977 NNTP
- RFC 1036 不明 Standard for Interchange of USENET Messages
メッセージ/MIME
MIMEがJIS化されていました
- JIS X 5810-1:2008 多目的インターネットメール拡張(MIME)―第1部:インターネットメッセージ本体のフォーマット
- JIS X 5810-2:2008 多目的インターネットメール拡張(MIME)―第2部:メディア型
- JIS X 5810-3:2008 多目的インターネットメール拡張(MIME)―第3部:非ASCIIテキストへのメッセージヘッダ拡張
- JIS X 5810-5:2008 多目的インターネットメール拡張(MIME)―第5部:適合基準
- RFC 5322 標準 Mime Message (2822廃止、4021更新)
HTML訳 TEXT訳
- RFC 4648 標準 Base16, Base32, Base64
- RFC 4289 BCP 13 MIME Part 4 登録手続き
- RFC 4288 BCP 13 MIME Part 4 メディアタイプ仕様と登録手続き 2048を廃止
- RFC 4180 情報 CSVファイルの標準形式とMIME型
- RFC 4155 情報 application/mbox メディアタイプ
- RFC 4142 標準 Full-mode Fax Profile for Internet Mail (FFPIM)
- RFC 4141 コンテンツ変換のためのSMTPとMIMEの拡張
- RFC 4134 情報 S/MIME メッセージの例
- RFC 3548 情報 Base16, Base32, Base64 RFC 4648により廃止
- RFC 2822 歴史 Mime RFC 5322により廃止
- RFC 2630 - 2634, 2785, 2876, 2984, 3058 S/MIME関連
- RFC 2634 標準 改良 Security Services for S/MIME
- RFC 2633 標準 S/MIME Version 3 Message Specification
- RFC 2632 標準 S/MIME Version 3 Certificate Handling
- RFC 2425 JIS TR X 0045 ディレクトリ情報のためのMIME内容型 (JIS TRは廃止)
- RFC 2426 JIS TR X 0046 vCard電子名刺のMIMEディレクトリプロファイル (JIS TRは廃止)
- RFC 2392 Message-ID mid: cid:
- RFC 2312 情報 S/MIME Version 2 Certificate Handling
- RFC 2311 情報 S/MIME Version 2 Message Specification
- RFC 2231 標準 MIMEパアラメーター値と符号化単語拡張 文字セット・言語そして継続
HTML
- RFC 2183 標準 インターネットメッセージにおけるコミュニケーティングプレゼンテーション情報: Content-Disposition ヘッダ
- RFC 2076 情報 共通インターネットメッセージヘッダ
- RFC 2049 MIME JIS TS X 0107:2005 多目的インターネットメール拡張(MIME)-第5部:適合基準
- RFC 2048 MIME RFC 4288により廃止 JIS TS X 0106:2005 多目的インターネットメール拡張(MIME)-第4部:登録手続
- RFC 2047 MIME JIS TS X 0071 多目的インターネットメール拡張(MIME) 第3部 非ASCIIテキストへのメッセージヘッダ拡張
- RFC 2046 MIME JIS TS X 0070:2004 多目的インターネットメール拡張(MIME)- 第2部:メディア型
- RFC 2045 MIME JIS TS X 0069 多目的インターネットメール拡張(MIME)-第1部:インターネットメッセージ本体のフォーマット
- RFC 1846 実験 SMTP 521 リプライコード
- RFC 1806 RFC 2183により更新
- RFC 1556 情報 MIMEにおける双方向テキストの取り扱い
- RFC 1521,1522, 1590 歴史 RFC 2045-2049により廃止
- RFC 822 歴史 RFC 2822により廃止
POP3/IMAP4
- RFC 5258 標準 IMAP4 LISTコマンド拡張 3348廃止、2193更新
- RFC 5034 POP3 SASL RFC 1734を廃止
- RFC 4146 情報 シンプルな新規メール通知
- RFC 3501 標準 IMAP4
- RFC 3348 歴史 RFC 5258により廃止
- RFC 2177 IMAP4 IDLE
- RFC 1939 標準 STD 53 POP3
- 他
文字コード
- RFC 3629 標準 UTF-8
- RFC 2279 UTF-8 ISO 10646の変換フォーマット RFC 3629により廃止
- RFC 2278 IANA文字集合の登録
- RFC 2277 BCP 文字集合と言語に関する IETF の方針
- RFC 2237 情報 ISO-2022-JP-1 (IANA未登録なので非標準、使用禁止)
- RFC 2152 UTF-7 電子メールにとって安全な Uncodeの変換フォーマット
- RFC 2044 UTF-8 RFC 2279により廃止
- RFC 1922 ISO-2022-CN ISO-2022-CN-EXT CN-GB CN-GB-12345 CN-Big5
- RFC 1843 情報 HZ 中国語とASCII混在ファイル交換用データフォーマット
- RFC 1842 情報 HZ-GB-2312
- RFC 1557 インターネットメッセージのための韓国語文字符号化
- RFC 1555 情報 インターネット・メッセージのためのヘブライ文字符号化法
- RFC 1554 情報 ISO-2022-JP-2: ISO-2022-JPの多国語拡張
- RFC 1468 インターネットメッセージでの日本語文字符号化 (ISO-2022-JP)
国際化ドメイン名
XMPP関連
- RFC 2782 DNS SRV
- RFC 3920 - 3923
- RFC 4622
- RFC 4854
- RFC 4979
RFCドキュメントの和訳と収集を束ねてくれる系コミュニティ/プロジェクトがほしい
- Email Standards Project
http://www.email-standards.org/
API的なもの
MUA的なもの (ほぼmixiユーザ数順)
- Gmail (Google)
- Becky!
- Mozilla Thunderbird
- Shuriken Pro (JustSystems)
- EdMax
- Eudora
- Al-Mail32
- Sylpheed
- 秀丸メール
- PostPet
- 携帯電話/PHS各種(au/DoCoMo/Softbank/他)
サーバ的なもの
- Postfix
- qmail
- sendmail
- Dovecot
おすすめ書籍
文字コードもいろいろありますね。
携帯電話などで使われる絵文字対応も苦労させられます。日本語メールはUnicode化されるのか、ISO-2022-JPのまま突き進んでしまうのか?
アジア圏はEUC系が多いみたい?
文字コードの話題は
http://lists.sourceforge.jp/mailman/listinfo/legacy-encoding-talk-ja
などが適切でしょうか
外からは何しているのかわからない組織達?
作るのだ
Last update 2003.11.13
いろいろ調べてたのと、qmail
に拡張機能をいろいろ設定するのなどが面倒だったりするので、自分でいじくりやすいメールサーバを作ってみることにしました。今までspam対策でいろいろ作ってきていた機能の取り込み、SMTPAUTHなどの搭載、マルチドメインPOP機能の統合など、ほしい機能にいろいろ対応してみる予定。Javaで作っているので、大抵の環境で動作可能です。
基本的な動作ができるところまで動いています。
- 基本機能
基本的なRFCにはできる限り対応すること
ESMTP対応済
- qmail相当機能
- 受信系機能
- 不正中継防止、RBL参照、および自動調査、登録機能(spam拒否機能)
- LDAP、S/MIME は?
- SENDによるメッセンジャー機能(謎
- エージェント機能(未定)
- 新メールプロトコルおよびルールの研究・開発
こちらも優先して行いたいところです。
まずは、基本機能の設計です。
javamail とは基本的に関係なくつくります。似ているかもしれません。
- net.siisise.mail パッケージ
- SMTP サーバ(受信)側機能
- SMTPc 接続側(クライアント側)機能
- SMTPd サーバメイン
- MDA
- LocalMDA ローカル配信用
- RemoteMDA リモート配信用
- MailBox アカウントメールボックス
- MUA (利用予定なし)
- MailAddress メールアドレス
- MailMessage メッセージ
- POP3
こんな感じで作っています。
メールプロトコルの研究と開発
[ m ] [ a ] [ i ] [ l ] [ @ ] [ d ] [ e ] [ v ] [ . ] [ j ] [ p ] でSMTP、新メールプロトコル開発のためのメーリングリストを開設します。
smtpでウイルスやspam対策をするためのメーリングリストではありません。
参加者こっそり募集いたします。
英語では新しいメールプロトコルを作るというような話が進んでいるようです。英語はいやなので、同じことを日本語でもしてみようということ。メーリングリストへは、英語でも日本語でも他の言語でもいいので投稿してくださいということにしてみますか?
基本的には日本語が書けなくてもいいので読める人が参加ということで。
登録方法
メールシステムはfmlを使っているので、上の dev.jp ドメインのmail-ctlアドレス宛に、subscribe 名前 を 本文に書いたメールを送れば登録できます。
参考
メールは人だけが使うものでもないらしい
Last update 2001.3.20
でしょ。
あるソフトがあるソフトに連絡をしたいとします。
TCP/IPで通信をしてもかまいませんが、常時接続されているわけではありません。
アプリケーションがメールを使えるようになってみました、でもいいような気がしますね。
今のメールはほとんど人が読むようにしか作られてないのかな・・・。
[James]とかとか。
[しいしせねっと]