🦧

[SMTP]MailKit を用いた認証方式しらべ

2023/04/18に公開

2023/03/06 現在の内容です。
C# を用いた Windows アプリの開発に携わっています。Outlook や GMail など主要メーラーにおいて BASIC 認証を廃止して OAuth2 認証(認可)を用いてセキュリティを高めようという動きがあります。🚨🚔🚨🚔🚨
OAuth2 認証に対応している SMTP サーバーはどれだというところから
各SMTP サーバーがどのような認証方式に対応しているのか MailKit というライブラリを用いて調査しましたので、議事録を兼ねて結果をまとめます。💌

参考 API

http://www.mimekit.net/docs/html/T_MailKit_Net_Smtp_SmtpCapabilities.htm

  • ライブラリ
    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

調査方法

上記リンクを参考に、 SMTP サーバーの ホスト名・ポート番号・暗号化方式 を指定して応答を確認します。なお、SMTP サーバーは下記を参考にしました。間違いがあるかもしれません、ご了承ください。

https://itojisan.xyz/trouble/8173/
http://free.arinco.org/mail/index4.html

調査結果

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 認証に対応していました。

所感

  • OAuth2 認証に対応しているのはまだ少数派であり、今後どのように増えていくのが楽しみ
  • Yahoo!JAPAN ではOAuth2 認証に未対応で Yahoo! Mail は対応であることがやや驚き
  • そもそもメーラーの数の多さに驚きました

Discussion