[go] 5分でできる sendgrid apiでメール送信

SendGridさんのアカウント開設

アカウント作成(*1) -> コンパネメニュー -> Settings -> API Keys -> Create API Key(右上ボタン) -> 適当にAPI Keyの名前つけて Create&Viewボタン押下 -> API Keyをメモっておく

*1
アカウントを作成するのに審査があります。私はいくつかの選択肢の中からサイト作成を選択しました。ご担当者さんのアナウンスといい作業はとってもスムーズに終了。ちなみに表題の5分にはこの申請についての時間は含んでいません。つまりインチキです。

SendGridさんのサンプルを参照したが...

Goでメール送信!SendGridを使って簡単に実装する方法
書いててなんかおかしいなと思ったら、この記事5年以上前のものです。

スクラッチで

1: ディレクトリ(sendgrid-example1)作る
2: 上のディレクトリに移動してgomod初期化とパッケージインストール

go mod init sendgrid-example1
go get -u github.com/sendgrid/sendgrid-go

3: コード

package main

import (
    "fmt"

    "github.com/sendgrid/sendgrid-go"
    "github.com/sendgrid/sendgrid-go/helpers/mail"
)

// 記述されてるアドレスは架空のものです
func main() {
    from := mail.NewEmail("dobusarai info", "info@dobudobuo.net")
    subject := "mail test subject"
    to := mail.NewEmail("hogehoge", "dobusarai@dobudobuo.net")
    plainTextContent := "and easy to do anywhere, even with Go"
    htmlContent := "<strong>and easy to do anywhere, even with Go</strong>"
    message := mail.NewSingleEmail(from, subject, to, plainTextContent, htmlContent)
    client := sendgrid.NewSendClient("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX<API KEY>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
    response, err := client.Send(message)
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(response.StatusCode)
        fmt.Println(response.Body)
        fmt.Println(response.Headers)
    }
}

goをちょっと学びながら書いているが、初学者殺しのクソブログエントリが多すぎる。結局githubのreadmeとソースコードを読むのが一番速く済みますね。英語はDeepLさんの出番です!あ、goはシングル(ファイル)バイナリになったりコンパイル速度とか良いところ多いけど、やはり例外がないので書くのかったるい。あとgo modulesはクソだと思う。これ↓とか。
Go Modules でインターネット上のレポジトリにはないローカルパッケージを import する方法
なんやねんインターネット上にパッケージがあるのが前提て。これ使うな?デファクトスタンダード技術使うなとか、それこそ初学者殺しでしょ……。NameSpace & Classに慣れきっているのでどうすりゃいいんだこれ?ってのがある。goはClassの概念がないので初めは細かくパッケージ切ってやっていこうかと思ったのだけど、この仕様のせいでダルすぎてなー。どうするのが最適解なのか。まーそのうちわかんだろ。
おわり。