0
1

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 1 year has passed since last update.

【OCI】Email Deliveryを使ってASP.NET(C#)で構築したサーバからメール送信してみる

Posted at

はじめに

今回はOracle Cloud Infrastructure(OCI)のEmail Delivery(SMTP)の
機能を使ってASP.NET(C#)で構築したサーバからメール送信する手順を
紹介したいと思います。

■実行環境
Windows Server 2019 Standard
Visual Studio 2022

■参考
・電子メール配信サービスの概要
https://docs.oracle.com/ja-jp/iaas/Content/Email/Concepts/overview.htm

今回はパブリックサブネットに作成したAPサーバ(Windows Server)から
メール送信する構成となります。

■構成
image.png

■事前準備
・Email Deliveryの使用権限のあるアカウントを準備
今回はOCIの管理者で利用するため、Administorators権限を付与した
アカウントを利用します。

Administorators権限がない場合は以下のポリシー作成した場合でも
Email Deliveryの利用は可能です。

<ポリシー>
allow any-user to manage email-family in compartment [コンパートメント名]

・ドメインの準備
メール送信するためにドメインの設定が必要となります。
予めドメインレジストラ(お名前.com等)でドメインを取得しておき、
ネームサーバをOCIのものに変更しておきます。

[OCIのNSレコード]
ns1.p68.dns.oraclecloud.net.
ns2.p68.dns.oraclecloud.net.
ns3.p68.dns.oraclecloud.net.
ns4.p68.dns.oraclecloud.net.

ネームサーバの変更方法は以下を参考にします。
(例 お名前.com)
https://help.onamae.com/answer/20390

・ネットワークの設定
VCN、サブネット(パブリック)、セキュリティリスト等を
作成しておき、インターネットからHTTPS(Port 443)でアクセスできるように
準備しておきます。

ネットワークの作成方法についてはこちらを参考にします。
https://oracle-japan.github.io/ocitutorials/beginners/creating-vcn/

・Windows Server 2019の作成
予めAPサーバとして作成するWindowsのComputeを作成しておきます。

Computeの作成方法はこちらを参考にします。
https://oracle-japan.github.io/ocitutorials/beginners/creating-compute-instance/

・Windows Server 2019 - Visual Studioの設定
Windows Server 2019に Visual Studioをインストールして、
ASP.NET(C#)が動く環境を準備します。

※必ず、ASP.NET Web アプリケーション(.NET Framework)の
テンプレートが動くようにインストールしてください。

Visual Studio 2022 インストール手順は以下を参考にします。
https://learn.microsoft.com/ja-jp/visualstudio/install/install-visual-studio?view=vs-2022

◆目次
1.ドメイン [パブリック・ゾーン] の作成
2.SMTP資格証明の作成
3.Email Deliveryの設定
4.DNSの設定
5.メール送信アプリの作成
6.クライアントPCからメール送信

1. ドメイン [パブリック・ゾーン] の作成

予め準備しておいたドメインを使ってOCIからメールするためには
まずはパブリック・ゾーンを作成する必要があります。

左上メニュー[Ξ]からネットワーキング → ゾーンを選択します。
image.png
ゾーンの作成を実行します。
image.png
ゾーン名に所有しているドメインを入力し、作成ボタンを実行します。
image.png

以上でドメインのゾーン作成は終了です。

2.SMTP資格証明の作成

メール送信の認証で使用するSMTP資格証明書を作成します。

右上の人型アイコンからユーザー設定を選択し、
資格証明書の生成を実行します。
image.png
※OCIコンソールの変更により、画面の配置が異なる場合は、
アイデンティティ > ユーザー > ユーザーの詳細
から画面遷移してください。

続いて左下のSMTP資格証明を選択し、資格証明書の生成を実行します。
image.png

入力画面が表示されるので説明(任意の文字列)を入力し、
SMTP資格証明書の生成を実行します。
image.png
ユーザー名、パスワードが表示されるのでコピーして保存しておきます。
image.png
※これらは一度しか表示されないため、コピーし忘れたら再作成してください。

以上でSMTP資格証明書の作成は終了です。

3.Email Deliveryの設定

OCIからメール送信するためにEmail Deliveryの設定を行います。

左上メニュー[Ξ]から開発者サービス → 電子メール配信を選択します。
image.png
続いて左メニューの電子メール・ドメインを選択し、
電子メール・ドメインの作成を実行します。
image.png
入力画面が表示されるので、1. ドメイン [パブリック・ゾーン] の作成の
ステップで登録したドメインを電子メールドメイン名として入力し、
電子メール・ドメインの作成を実行します。
image.png
作成すると次のような画面が表示されるので、左上のEDアイコンが
緑色になるまで待ちます。
完了後にDKIMの追加を実行します。
image.png
入力画面が表示されるので以下STEPを進め、最後にDKIMの作成を実行します。
STEP1: DKIMセレクタとして任意の文字列を入力
STEP2: DKIMレコードの作成を実行
STEP3: CNAMEレコードとCNAME値をコピー・保続
image.png
完了すると次のような画面の状態となります。
image.png
続いて承認済送信者を登録するため、左下メニューの承認済送信者を選択し、
承認済送信者の作成を実行します。
image.png
入力画面が表示されるので、電子メール・アドレスを入力し
承認済送信者の作成を実行します。
image.png
※ここでは、info@[ドメイン]で登録します。

承認済送信者を作成後、右の詳細からSPF表示を選択します。
image.png
SPFが表示されるのでアジア太平洋のSPFレコードをコピー・保存し、閉じます。
image.png
ついでにSMTP接続先情報も確認しておきます。
Email Deliveryのトップページから左のメニューに構成を
選択するとエンドポイント等の情報が確認できます。
image.png

以上でEmail Deliveryの設定は終了です。

4.DNSの設定

冒頭で作成したドメインにDKIMレコードとSPFレコードを追加します。
左上メニュー[Ξ]からネットワーキング → ゾーンを選択します。
image.png
続いて作成したドメインを選択します。
image.png
左下メニューのレコードを選択し、レコードの管理を実行
image.png
この画面ではDNSレコード追加ができますので、
DKIMとSPF(txt)レコードの2つを追加します。
image.png

・DKIMレコード
image.png
入力項目は以下の通りです。
①名前: 3.Email Deliveryの設定で登録したCNAMEレコード
②タイプ: CNAME
③TTL: 60 ※ここでは即時反映させるために最短に設定
④Target(ターゲット): 3.Email Deliveryの設定で登録したCNAME値

入力後にレコードの追加を実行

・SPFレコード
image.png
入力項目は以下の通りです。
①名前: (未入力)
②タイプ: TXT
③TTL: 60 ※ここでは即時反映させるために最短に設定
④Text (テキスト): 3.Email Deliveryの設定で取得したSPFレコード

こちらも入力後にレコードの追加を実行

登録後、2つのレコードが追加されていることを確認し、
変更の公開を実行
image.png
さらに変更の公開の確認が表示されるので実行
image.png

以上でDNSの設定は終了です。

5.メール送信アプリの作成

Windows Server上のASP.NET(C#)からメール送信するためのアプリを
作成するためにOCI上に立てたサーバにRDP経由でログインします。
(この作業はクライアントPCにVisutal Studioをインストールしても行えます)

サーバでVisutal Studioを起動し、新しいプロジェクトの作成を選択します。
image.png
ASP.NET Web アプリケーション(.NET Framework)を選択し、次へ進みます。
image.png
プロジェクトの必要情報を入力し、作成を実行します。
image.png
Web Formsを選択し、作成を実行します。
image.png
プロジェクトの作成完了後、メニューのプロジェクトから
Nugetパッケージの管理を選択します。
image.png
Nugetパッケージマネージャーが開いたら下記のステップを行います。
・参照タブを選択
・MailKitで検索
・MailKitを選択
・インストールを実行
あとははガイドに従って進めます。

image.png

次にソリューションエクスプローラでプロジェクトを右クリックします。
image.png
追加 - Webフォームを選択します。
image.png
フォームの名前を決めてOKを押します。
image.png
フォームが追加されるとソースタブにコードが表示されるので
HTMLタグ内を次のものに置き換えます。
image.png

<HTMLタグ>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server" enctype="multipart/form-data">
            <br />
            <asp:Label ID="lblMessage" name="lblMessage" runat="server" ForeColor="#FF6666"></asp:Label>
            <hr style="height: -5px; margin-bottom: 0px" />
            <br />
            宛先:<br />
            <asp:TextBox ID="txtTo" runat="server" TextMode="Email" Width="257px"></asp:TextBox>
            <br />
            <br />
            CC:<br />
            <asp:TextBox ID="txtCc" runat="server" TextMode="Email" Width="257px"></asp:TextBox>
            <br />
            <br />
            BCC:<br />
            <asp:TextBox ID="txtBcc" runat="server" TextMode="Email" Width="257px"></asp:TextBox>
            <br />
            <br />
            件名<br />
            <asp:TextBox ID="txtTitle" runat="server" Width="600px"></asp:TextBox>
            <br />
            <br />
            本文:<br />
            <asp:TextBox ID="txtBody" runat="server" Rows="10" style="margin-bottom: 5px" TextMode="MultiLine" Width="600px"></asp:TextBox>
            <br />
        <asp:Button ID="btnSend" runat="server" Text="送信" Width="90px" OnClick="btnSend_Click" />
    </form>
</body>
</html>

続いてデザインタブを開いたら送信ボタンをダブルクリックします。
image.png
コードディタが表示されるので次のように書き換えます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void btnSend_Click(object sender, EventArgs e)
        {
            string uid = "[1]";
            string pwd = "[2]";

            this.lblMessage.Text = "";

            var message = new MimeKit.MimeMessage();
            message.From.Add(new MimeKit.MailboxAddress("Email Devliery", "[3]")); 

            if (this.txtTo.Text != "") message.To.Add(new MimeKit.MailboxAddress("", this.txtTo.Text));
            if (this.txtCc.Text != "") message.Cc.Add(new MimeKit.MailboxAddress("", this.txtCc.Text));
            if (this.txtBcc.Text != "") message.Bcc.Add(new MimeKit.MailboxAddress("", this.txtBcc.Text));
            message.Subject = this.txtTitle.Text;

            var textPart = new MimeKit.TextPart(MimeKit.Text.TextFormat.Plain);
            textPart.SetText("iso-2022-jp", this.txtBody.Text);

            message.Body = textPart;

            using (var client = new MailKit.Net.Smtp.SmtpClient())
            {
                try
                {
                    client.Connect("smtp.email.ap-tokyo-1.oci.oraclecloud.com", 587);
                    client.Authenticate(uid, pwd);
                    client.Send(message);

                    client.Disconnect(true);
                    this.lblMessage.Text = "メール送信完了";
                }
                catch (Exception ex)
                {
                    string err = ex.Message.ToString();
                    this.lblMessage.Text = err;
                    Page.SetFocus(lblMessage.ClientID);
                }
            }
        }
    }
}

※注意点
ソースコードの下記3つは実際に設定した値に変更してください。
[1] SMTP資格証明のユーザー名
[2] SMTP資格証明のパスワード
[3] 承認済送信者(info@ドメイン)

これらの作業でメール送信ができるようになりましたので
Windows Server環境にデプロイしてください。
(クライアントPCで動かす場合はそのまま実行できます)

以上でメール送信アプリの作成は終了です。

6.クライアントPCからメール送信

最後にメール送信のテストを実施してみます。
サーバ上にデプロイしたアプリにアクセスします。

宛先、件名、本文などを入力し、送信ボタンを実行します。
image.png

問題なければメール送信完了のメッセージが表示されます。

おわり

以上、Email Deliveryを使って簡単にメール送信することができました。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?