質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

Q&A

解決済

1回答

1644閲覧

go-mail でのconnection refused メールが送れない

AGLAAGLA

総合スコア54

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

0グッド

0クリップ

投稿2022/11/25 03:54

編集2022/11/25 03:57

golangにてメールを送信するプログラムを実行したいのですが、connection refusedで送信できません。

go

1package main 2 3import ( 4 "gopkg.in/gomail.v2" 5) 6 7func main() { 8 m := gomail.NewMessage() 9 m.SetHeader("From", "???@gmail.com") 10 m.SetHeader("To", "???") 11 m.SetHeader("Subject", "Hello!") 12 m.SetBody("text/plain", "Hello!") 13 14 d := gomail.Dialer{Host: "localhost", Port: 25} 15 if err := d.DialAndSend(m); err != nil { 16 panic(err) 17 } 18} 19

吐いているエラーは以下の通りです。

panic: dial tcp [::1]:25: connect: connection refused goroutine 1 [running]: main.main() /Users/???/Desktop/mail.go:16 +0x361

メールアドレスや、ポート番号を変更し試しましたが、無理でした。
原因がわかる方、教えていただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

このライブラリは単体でメールを任意のところに送れるわけではありません。
別途SMTPサーバーが必要です。
「localhost:25」を指定してメールが送れるためには、
「localhost:25」にSMTPサーバーつまり「手元のPC上にてSMTPサーバーを起動する」必要があります。

ただ、このライブラリはgmail対応なのでgmailサービスが設置しているSMTPサーバーを利用することができます。 <- すいません勘違い
まずはSMTPサーバーを確保しましょう。(ローカルに立てるか、クラウドにSMTPサーバーを立てるか、SMTPサーバーをレンタルするか)

ローカルに立てる場合

以下のコードでシンプルなSMTPサーバーを立てることができます。

go

1package main 2 3import ( 4 "bytes" 5 "log" 6 "net" 7 "net/mail" 8 9 "github.com/mhale/smtpd" 10) 11 12func mailHandler(origin net.Addr, from string, to []string, data []byte) error { 13 msg, _ := mail.ReadMessage(bytes.NewReader(data)) 14 subject := msg.Header.Get("Subject") 15 log.Printf("Received mail from %s for %s with subject %s", from, to[0], subject) 16 return nil 17} 18 19func main() { 20 smtpd.ListenAndServe("127.0.0.1:2525", mailHandler, "MyServerApp", "") 21}

これはメール送信を検知してそれを表示するだけのSMTPサーバーです。
さらに外部のSMTPサーバーに中継する機能はありません。
(これだと外部ドメインに実際にメールを送ることはできません。)

投稿2022/11/25 04:34

編集2022/11/25 04:45
nobonobo

総合スコア3367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nobonobo

2022/11/25 04:40

SMTPサーバーを直接使わずメールを送る方法もあります。 それがGMailのAPI利用です。
AGLAAGLA

2022/11/25 04:43 編集

ご丁寧な説明ありがとうございます。 一度ローカルに立ててみるのが、手っ取り早いですかね... (というのも、ローカルで正しく送れるかの実装をテストした後、AWSにあるファイルを送信する実装をしようと思っていました。) なので、とりあえず、メールが送信できるようになるのが現在のゴールなので、ローカルに立てて実装したいと思います。 申し訳ないですが、nobonoboさんのご存じの範囲で教えていただくことは可能でしょうか? 追記→ GmailAPI良さそうですね、無料なら使ってみたいと思います。
AGLAAGLA

2022/11/25 04:50

ありがとうございます。 参考にさせていただきます。
nobonobo

2022/11/25 04:58

ちなみに自前でのインターネットに公開する形のSMTPサーバーの運用はあまりお勧めしません。(悪意の踏み台にならないよう運用するのには抑えておくノウハウがそれなりにあります)
AGLAAGLA

2022/11/25 05:49

ご丁寧にありがとうございます。 もう1つだけ質問させていただきたいです。 https://github.com/go-gomail/gomail こちらのリポジトリには、smtp.goなどのファイルもありますが、このライブラリだけでも送信は厳しいのでしょうか?
nobonobo

2022/11/25 15:48

そのファイルの内容はSMTPクライアントなので。 唯一SMTPクライアント実装だけでメールを送れる可能性があるのは ご自身で契約しているインターネットプロバイダがSMTPサーバーを利用者に開放している場合ですね。 あるならプロバイダの提供される情報を使ってSMTPサーバーにDialすることでメールが送れるかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問