2

私は、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で簡単なものが欠けていることを願っていますか?

マイナー ノート: テンプレートを使用しておらず、テンプレートを指定せずに送信する方法がわからなかったため、テンプレートを追加したリポジトリのコミットを元に戻しました。

4

0 に答える 0