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

ginでメールを送信する機能を作成する

Posted at

はじめに

  • GmailやOutlookなどのメールアプリにメールを送信する関数を作成したのでその備忘録です。

目次

  1. どんな機能を作成したかの概要
  2. 実際のコード
  3. 保存した値の編集方法

どんな機能を作成したかの概要

  • 任意のタイミングでメール送信するとメールアプリに下記の画像のようなメールが送信されます。
    image.png

実際のコード

  • 実際のコードは下記の関数を使用します。
email_service.go
func (s *EmailService) SendWelcomeEmail(to string) error {
	// 環境変数から必要な情報を取得
	smtpHost := os.Getenv("SMTP_HOST")
	smtpPort := os.Getenv("SMTP_PORT")
	smtpUsername := os.Getenv("SMTP_USERNAME")
	smtpPassword := os.Getenv("SMTP_PASSWORD")

	// 送信元は SMTP_USERNAME を利用
	from := smtpUsername

	subject := "エンジニアのポートフォリオ へようこそ!"
	body := `
    <html>
    <body>
        <div style="font-family: Arial, sans-serif; color: #333;">
            <h2>エンジニアのポートフォリオ へようこそ!</h2>
            <p>この度はご登録ありがとうございます!エンジニアのポートフォリオは「エンジニアを目指す、すべての学生のためのプラットフォーム」です。</p>
            <p>他大学の学生ポートフォリオを見ることで本格的な就職活動でご利用いただけます!</p>
            <p>プロフィールや作品をアップすることによって、企業の人たちがあなたを見つけることができるようになるかもしれません。ぜひあなたのことを、あなたの作品や言葉で教えてくださいね。</p>
        </div>
    </body>
    </html>
    `

	message := []byte("To: " + to + "\r\n" +
		"Subject: " + subject + "\r\n" +
		"MIME-version: 1.0;\r\n" +
		"Content-Type: text/html; charset=\"UTF-8\";\r\n" +
		"\r\n" + body + "\r\n")

	// SMTP認証情報の設定
	auth := smtp.PlainAuth("", smtpUsername, smtpPassword, smtpHost)

	return smtp.SendMail(smtpHost+":"+smtpPort, auth, from, []string{to}, message)
}

  • SMTPサーバーに関する情報を取得する

    • 以下のコードでSMTPサーバーの情報を取得しています
    email_service.go
    smtpHost := os.Getenv("SMTP_HOST")
    smtpPort := os.Getenv("SMTP_PORT")
    smtpUsername := os.Getenv("SMTP_USERNAME")
    smtpPassword := os.Getenv("SMTP_PASSWORD")
    
    • そもそもsmtpサーバーを含んだメール送信の一連の流れは以下の図のようになります。

    image.png

    • この図を見ればわかるようにsmtpサーバーを用意する必要があるので、それらの情報を取得しなければなりません。
    • 今回はsmtpサーバとしてGmail SMTPサーバーを採用しています。このsmtpサーバーではこのサーバー専用のGoogleアカウントを用意することが推奨されると思います。
    • envファイルから取得する必要のあるsmtpサーバーに関連した認証情報は以下の通りに指定しました。
    SMTP_HOST SMTP_PORT SMTP_USERNAME SMTP_PASSWORD
    smtp.gmail.com 587 Googleアカウントのメアド アプリパスワード
    • アプリパスワードとは普通のパスワードのことではありません。このリンクから入手してください。
    • 前提としてGoogleアカウントの2段階認証が有効になっている必要があります。もし必要であればこのリンクを活用にして2段階認証を有効にしてください。

    • また、アプリパスワードは1度しか表示されないので気を付けてください。

  • 以下のコードでメールの本文と件名を作成します。HTML形式で作成しています。

    subject := "エンジニアのポートフォリオ へようこそ!"
    body := `
    <html>
    <body>
        <div style="font-family: Arial, sans-serif; color: #333;">
            <h2>エンジニアのポートフォリオ へようこそ!</h2>
            <p>この度はご登録ありがとうございます!エンジニアのポートフォリオは「エンジニアを目指す、すべての学生のためのプラットフォーム」です。</p>
            <p>他大学の学生ポートフォリオを見ることで本格的な就職活動でご利用いただけます!</p>
            <p>プロフィールや作品をアップすることによって、企業の人たちがあなたを見つけることができるようになるかもしれません。ぜひあなたのことを、あなたの作品や言葉で教えてくださいね。</p>
        </div>
    </body>
    </html>
  • 以下のコードでメールを組み立てています。メールメッセージをMIME形式で組み立てます。宛先、件名、MIMEバージョン、コンテンツタイプ(HTML形式)を指定します。

    email_service.go
        message := []byte("To: " + to + "\r\n" +
            "Subject: " + subject + "\r\n" +
            "MIME-version: 1.0;\r\n" +
            "Content-Type: text/html; charset=\"UTF-8\";\r\n" +
            "\r\n" + body + "\r\n")
    
    • このコードに記述されている「to」は引数として扱われていて、受信者のメールアドレスが格納されています。
  • 以下のコードでSMTPサーバーの認証情報を設定してSMTPサーバー経由でメールを送信しています。

email_service.go
    auth := smtp.PlainAuth("", smtpUsername, smtpPassword, smtpHost)
	return smtp.SendMail(smtpHost+":"+smtpPort, auth, from, []string{to}, message)

まとめ

  • 今回はsmtpサーバーを使用したメール送信の仕方に関してまとめました。しかしよくわからないところもぶっちゃけ多い。。。これは勉強するべきなのか必要ないのか。。。
0
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
0
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?