🐸
[SMTP]MailKit を用いた認証方式しらべ
2023/03/06 現在の内容です。
C# を用いた Windows アプリの開発に携わっています。Outlook や GMail など主要メーラーにおいて BASIC 認証を廃止して OAuth2 認証(認可)を用いてセキュリティを高めようという動きがあります。🚨🚔🚨🚔🚨
OAuth2 認証に対応している SMTP サーバーはどれだというところから
各SMTP サーバーがどのような認証方式に対応しているのか MailKit というライブラリを用いて調査しましたので、議事録を兼ねて結果をまとめます。💌
参考 API
- ライブラリ
MailKit(Version: 3.0.0 以降) - Namespace
MailKit.Net.Smtp - 列挙型
SmtpCapabilities - 実装
公式が載せているコピペでも動きましたので、環境を構築すれば誰でもすぐに確認することができます。
public static void PrintCapabilities ()
{
using (var client = new SmtpClient ()) {
client.Connect ("smtp.gmail.com", 465, SecureSocketOptions.SslOnConnect);
if (client.Capabilities.HasFlag (SmtpCapabilities.Authentication)) {
var mechanisms = string.Join (", ", client.AuthenticationMechanisms);
Console.WriteLine ("The SMTP server supports the following SASL mechanisms: {0}", mechanisms);
client.Authenticate ("username", "password");
}
if (client.Capabilities.HasFlag (SmtpCapabilities.Size))
Console.WriteLine ("The SMTP server has a size restriction on messages: {0}.", client.MaxSize);
if (client.Capabilities.HasFlag (SmtpCapabilities.Dsn))
Console.WriteLine ("The SMTP server supports delivery-status notifications.");
if (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime))
Console.WriteLine ("The SMTP server supports Content-Transfer-Encoding: 8bit");
if (client.Capabilities.HasFlag (SmtpCapabilities.BinaryMime))
Console.WriteLine ("The SMTP server supports Content-Transfer-Encoding: binary");
if (client.Capabilities.HasFlag (SmtpCapabilities.UTF8))
Console.WriteLine ("The SMTP server supports UTF-8 in message headers.");
client.Disconnect (true);
}
}
- 調査 PC
- OS
Windows 10 Pro - プロセッサ
Intel(R) Core(TM) i5-10310U CPU @ 1.70GHz 2.21 GHz - メモリ
16 GB
- OS
調査方法
上記リンクを参考に、 SMTP サーバーの ホスト名・ポート番号・暗号化方式 を指定して応答を確認します。なお、SMTP サーバーは下記を参考にしました。間違いがあるかもしれません、ご了承ください。
調査結果
50個ほど SMTPサーバーについて確認してみました。
| No | メーラー | SMTPサーバー名 | ポート | 対応認証方式 | メッセージ最大サイズ |
|---|---|---|---|---|---|
| 1 | Gmail | smtp.gmail.com | 587 | LOGIN PLAIN PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH XOAUTH2 |
35882577 |
| 2 | Yahoo!JAPANメール | smtp.mail.yahoo.co.jp | 465 | PLAIN LOGIN XYMYCONNECT |
38168576 |
| 3 | Outlook.com | smtp-mail.outlook.com | 587 | LOGIN XOAUTH2 |
157286400 |
| 4 | Office | smtp.office365.com | 587 | LOGIN XOAUTH2 |
157286400 |
| 5 | AOLメール | smtp.aol.com | 465/587 | PLAIN LOGINXOAUTH2 OAUTHBEARER |
41697280 |
| 6 | BIGLOBEメール | smtp.aol.com | 465 | PLAIN LOGIN XOAUTH2 OAUTHBEARER |
41697280 |
| 7 | iCloud | smtp.mail.me.com | 465 | - | - |
| 8 | ムームーメール | smtp.muumuu-mail.com | 465 | LOGIN PLAIN CRAM-MD5 |
104857600 |
| 9 | ロリポップ | smtp.lolipop.jp | 465 | LOGIN PLAIN CRAM-MD5 |
104857600 |
| 10 | OCN | smtp.ocn.ne.jp | 465/587 | PLAIN LOGIN |
10485760 |
| 11 | Yahoo!BB | ybbsmtp.mail.yahoo.co.jp | 465/587 | PLAIN LOGIN XYMYCONNECT |
38168576 |
| 12 | So-net | mail.so-net.ne.jp | 465 | - | - |
| 13 | ぷらら(plala) | secure.plala.or.jp | 465/587 | LOGIN PLAIN CRAM-MD5 |
20971520 |
| 14 | eo | smtps.eonet.ne.jp | 465 | LOGIN PLAIN CRAM-MD5 |
104857600 |
| 15 | nifty | smtp.nifty.com | 465/587 | LOGIN PLAIN CRAM-MD5 |
20971520 |
| 16 | 5x2.de | mail.5x2.de | 465/587 | PLAIN LOGIN |
52428800 |
| 17 | AnPa.de | www.anpa.de | 465/587 | PLAIN LOGIN |
76800000 |
| 18 | Bitrix24 | smtp.yandex.com | 465/587 | PLAIN LOGIN XOAUTH2 |
53477376 |
| 19 | Cockmail | mail.cock.li | 465/587 | PLAIN LOGIN |
10240000 |
| 20 | DerpyMail | derpymail.org | 465/587 | PLAIN LOGIN |
52428800 |
| 21 | Dismail.de | smtp.dismail.de | 587/2525 | PLAIN LOGIN |
36700160 |
| 22 | Disroot.org | disroot.org | 587 | PLAIN LOGIN |
73400320 |
| 23 | e-nautia | e-nautia.com | 465/587 | - | - |
| 24 | Gazeta.pl | smtp.gazeta.pl | 465/587 | PLAIN LOGIN XOAUTH2 |
90000000 |
| 25 | GMX Mail | mail.gmx.com | 465/587 | PLAIN LOGIN |
69920427 |
| 26 | Inbox.lt | mail.inbox.lt | 465/587 | PLAIN LOGIN |
59900000 |
| 27 | Inbox.lv | mail.inbox.lv | 465/587 | PLAIN LOGIN |
59900000 |
| 28 | Interia.pl | poczta.interia.pl | 465/587 | PLAIN LOGIN |
157286400 |
| 29 | Kolab Now | smtp.kolabnow.com | 587 | PLAIN LOGIN |
62914560 |
| 30 | magenta.de | securesmtp.t-online.de | 465/587 | PLAIN LOGIN |
52428800 |
| 31 | Mail.bg | smtp.mail.bg | 465 | PLAIN LOGIN |
70000000 |
| 32 | Mail.com | smtp.mail.com | 465/587 | PLAIN LOGIN |
141557760 |
| 33 | Mail.ee | mail.ee | 465/587 | PLAIN LOGIN |
59900000 |
| 34 | Mailo | mail.mailo.com | 465/587 | LOGIN | 73400320 |
| 35 | Mail.ru | smtp.mail.ru | 465/587/2525 | PLAIN LOGIN XOAUTH2 |
73400320 |
| 36 | MetaMail | smtp.meta.ua | 465 | PLAIN LOGIN |
31457280 |
| 37 | Newmanity | webmail.ntymail.com | 465/587 | LOGIN | 73400320 |
| 38 | NixNet | smtp.nixnet.email | 465/587 | PLAIN LOGIN |
10240000 |
| 39 | O2.pl | poczta.o2.pl | 465 | PLAIN LOGIN |
- |
| 40 | OK.de | mail.ok.de | 465/587 | - | - |
| 41 | Onet.pl | smtp.poczta.onet.pl | 465 | PLAIN LOGIN XOAUTH2 |
90000000 |
| 42 | postale.io | mail.postale.io | 465/587 | PLAIN LOGIN |
36700160 |
| 43 | Rambler | smtp.rambler.ru | 465/587 | PLAIN LOGIN |
104857600 |
| 44 | Seznam Email | smtp.seznam.cz | 465/587 | PLAIN LOGIN |
52428800 |
| 45 | Snopyta | mail.snopyta.org | 465/587 | - | - |
| 46 | SoftHome | mail.SoftHome.net | 2500/25000 | - | - |
| 47 | Teknik.io | mail.teknik.io | 465/587 | - | - |
| 48 | VFEmail | mail.vfemail.net | 465/587 | - | - |
| 49 | Vivaldi Mail | smtp.vivaldi.net | 465/587 | PLAIN LOGIN OAUTHBEARER XOAUTH2 |
36700160 |
| 50 | XMail.net | smtp.xmail.net | 465 | - | - |
| 51 | Yahoo! Mail | smtp.mail.yahoo.com | 465 | PLAIN LOGIN OAUTHBEARER XOAUTH2 |
41697280 |
| 52 | Yandex.Mail | smtp.yandex.com | 465/587 | PLAIN LOGIN XOAUTH2 |
53477376 |
XOAUTH2 対応メールサーバー
今回の調査では下記 12 のメールサーバーが XOAUTH2 認証に対応していました。
- Gmail (Google)
- Outlook.com (Microsoft)
- Office (Microsoft)
- AOLメール (Oath(アメリカ))
- BIGLOBEメール (ビッグローブ社(日本))
- Bitrix24 (ビットリックス社(アメリカ))
- Gazeta.pl(ガゼッタ ピーエル (ポーランド))
- Mail.ru (メイルルー(ロシア))
- Onet.pl (オーネット(ポーランド))
- Vivaldi Mail (ヴィヴァルディ(ノルウェー))
- Yahoo! Mail (ヤフー(アメリカ))
- Yandex.Mail(ヤンデックス(イギリス))
所感
- OAuth2 認証に対応しているのはまだ少数派であり、今後どのように増えていくのが楽しみ
- Yahoo!JAPAN ではOAuth2 認証に未対応で Yahoo! Mail は対応であることがやや驚き
- そもそもメーラーの数の多さに驚きました
Discussion