私は、DropzoneJS を使用してファイル アップローダを実装し、Go を使用してバックエンドを作成しようとしていました (言語を使用したプログラミングの最初の試み)。私はhttps://github.com/hjr265/postmark.goを使用しようとしていますが、これは Go ライブラリの消印の推奨事項のようです。
アプリは 3 つの異なるハンドラーで構成され、1 つがヘッダーで使用されるトークン (以下のコードの ApplicationID) を提供します。
2 番目のハンドラーは、サーバーへの個々のファイルのアップロードを処理します。ファイルは、ApplicationID と同じ名前のディレクトリ内にグループ化されます。
ここまではすべてうまくいっています。
最後のハンドラーは、指定されたディレクトリ内のファイルをループし、それらを添付ファイルのスライスに追加します。
私ができると思ったのは、添付ファイルを作成して添付ファイルのスライスに追加し、それをメッセージと一緒に渡すことですが、これをテストするたびに、添付ファイル以外のすべてを含むメールを送信します. 送信ハンドラーのコードは次のとおりです。
http.HandleFunc("/submission", func(w http.ResponseWriter, r *http.Request){
client := postmark.Client{
ApiKey: "SOME-POSTMARK-API-KEY",
Secure: true,
}
fmt.Println(client)
attachments := []postmark.Attachment{}
switch r.Method {
case "POST":
appId := r.Header.Get("ApplicationID")
files, _ := ioutil.ReadDir("/tmp/uploader/" + appId)
for _, f := range files {
fullpath := "/tmp/uploader/" + appId + "/" + string(f.Name())
extension := filepath.Ext(fullpath)
mimeType := mime.TypeByExtension(extension)
upload, _ := os.Open(fullpath)
attachment := postmark.Attachment{
Name: f.Name(),
Content: upload,
ContentType: mimeType,
}
attachments = append(attachments, attachment)
}
}
res, err := client.Send(&postmark.Message{
From: &mail.Address{
Name: "SENDER-NAME",
Address: "sender@example.com",
},
To: []*mail.Address{
{
Name: "RECIPIENT-NAME",
Address: "recipient@example.com",
},
},
Subject: "Hooking up Postmark for sending email",
TextBody: strings.NewReader("MESSAGE-BODY-AS-TEXT"),
Attachments: attachments,
})
if err != nil {
panic(err)
}
fmt.Printf("%#v\n", res)
})
これは、Postmark から返された結果の例です。
&postmark.Result{ErrorCode:0, Message:"OK", MessageID:"29fdf3da-ae5d-40c8-af92-c13e93fa6b69", SubmittedAt:"2015-10-22T07:39:17.2297478-04:00", To:"\"RECIPIENT-NAME\" <recipient@example.com>"}
添付ファイルの操作方法で初歩的な間違いを犯していて、基本的にGoで簡単なものが欠けていることを願っていますか?
マイナー ノート: テンプレートを使用しておらず、テンプレートを指定せずに送信する方法がわからなかったため、テンプレートを追加したリポジトリのコミットを元に戻しました。