1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

c# (dotnet core 3.1) であけましておめでとうございます!

Posted at

あけましておめでとうございます。
毎年、適当な言語を選んで、あけましておめでとうメールを送っています。
今年は c# にしてみました。

Environment

  • 開発環境: Windows 10 pro
  • 開発ツール: Visual Studio 2019 + dotent core sdk 3.1
  • 実行環境: Ubuntu 18.04.1 LTS x64

Code

SmtpClientクラスはもう廃止なんですね。

https://docs.microsoft.com/ja-jp/dotnet/api/system.net.mail.smtpclient?view=netframework-4.8
重要
新しい開発には SmtpClient クラスを使用しないことをお勧めします。 SmtpClient は多くの最新プロトコルをサポートしていないためです。 代わりにMailkitまたはその他のライブラリを使用してください。 詳細については、GitHub でSmtpclient を使用しないことをお勧めします。

MSの公式ドキュメントにはMailkitを使えと。オープンな社風になってしまったMSに私は戸惑いを隠しきれません。
というので nuget で Mailkit をインストールしてgithubのサンプルコードを使いました。

using System;
using MailKit.Net.Smtp;
using MailKit;
using MimeKit;
using System.Collections.Generic;

namespace mail
{
	public class Program
	{
		public static void Main(string[] args)
		{
			var msg = new CustomMessage()
			{
				Subject = "I wish you a Happy new year 2020",
				From = "dharry@example.co.jp",
				SmtpServer = "mail.example.co.jp",
				AuthUser = "dharry",
				AuthPass = "mypass",
			};

			msg.To = new List<KeyValuePair<string, string>>() {
				new KeyValuePair<string, string>("山田","yamada@example.com"),
				new KeyValuePair<string, string>("斎藤","saito@example.com")
				new KeyValuePair<string, string>("佐藤","sato@example.com")
			};
			msg.Body = body;
			msg.Send();
		}

		private const string body = @"2020年01月01日になりました。
あけましておめでとうございます。
今年もよろしくお願いします。
";
	}


	public class CustomMessage
	{
		public List<KeyValuePair<string, string>> To { get; set; }
		public string Subject { get; set; }
		public string From { get; set; }
		public string Body { get; set; }
		public string SmtpServer { get; set; }
		public int SmtpPort { get; set; } = 587;
		public string AuthUser { get; set; }
		public string AuthPass { get; set; }

		public void Send()
		{
			foreach (var p in To)
			{
				var message = new MimeMessage();
				message.From.Add(new MailboxAddress(From));
				message.To.Add(new MailboxAddress(p.Key, p.Value));
				message.Subject = Subject;
				message.Body = new TextPart("plain")
				{
					Text = $"{p.Key}さん\n\n{Body}"
				};

				using (var client = new SmtpClient())
				{
					// For demo-purposes, accept all SSL certificates (in case the server supports STARTTLS)
					client.ServerCertificateValidationCallback = (s, c, h, e) => true;
					client.Connect(SmtpServer, SmtpPort, false);
					// Note: only needed if the SMTP server requires authentication
					client.Authenticate(AuthUser, AuthPass);
					client.Send(message);
					client.Disconnect(true);
					Console.WriteLine($"sendmessage.. {p.Value}");
				}
			}
		}
	}
}

Execute

ビルド->発行して、Linuxに持っていき、実行。
毎回思うのだが、dotnetコマンドの引数にdllというのが違和感ありすぎて困ります。

$ dotnet ./mail.dll
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?