読者です 読者をやめる 読者になる 読者になる

基本的に怠Diary

学習ログを残したい

Golangでメール取得

最初は楽だと思っていました。

どうせほかの有能じゃぽねーぜがじゃっぽじゃっぽ神コード書いて

メールなんてちょっちょいのちょいで取得!(実際C#はTKMPみたいな有名?Libraryあった)


かと思ってました。






だが実際に調べてみると送信&送信。


うるせえ私は受信したいんだよ



ならば作ってやろうぜ鎌倉幕府

















3日ぐらい粘って断念。Imapプロトコルだのなんだの詳しくないし理解も進みはすれど使いこなせるレベルにはなれなかった。



諦める寸前でGithubという神的なサイトの†検索†という神聖な機能を使えとゴーストが囁いたので使ってみると







github.com





なんやこれくっそ楽やんけ・・・Golang初めて一月も立たない私でも使えました。



いや使えてねえよ嘘つくなよ。






結論から言えばメールは取得できました。うん。




文字化けするんだよ!!!!!!!



それ変換できなくて時間切れになりました。   お前素人かよォ!



来週の月から水ガンバリマス。





ちなみに作成したサンプル


package main

import (
	"fmt"
	"os"
	"strconv"
	"time"

	imapreader "github.com/mvader/go-imapreader"
)

func main() {
	r, err := imapreader.NewReader(imapreader.Options{
		Addr:     "imap.gmail.com",
		Username: "username@gmail.com",
		Password: "password",
		TLS:      true,
		Timeout:  60 * time.Second,
		MarkSeen: true,
	})
	if err != nil {
		panic(err)
	}
	//Gmail側で"安全性の低いアプリがアカウントにアクセスするのを許可する"的な設定いじらないとここらへんでエラーでる
	er := r.Login()
	if er != nil {
		panic(er)
	}
	defer r.Logout()

	//メールボックスはINBOXを指定する
	messages, err := r.List(imapreader.GMailInbox, imapreader.SearchAll)
	if err != nil {
		panic(err)
	}
	//foreach的なので回そうと思ったらrangeでちーん(笑)したのでこちらの方式を採用
	for i := 0; i < len(messages) && i < 30; i++ {
		file, er := os.Create("mails/" + strconv.Itoa(i) + ".txt")
		if er != nil {
			fmt.Println(er)
		}
		body := string(messages[i].Body)
		//ここutf8string使っても変換できない・・・
		file.WriteString(string(body))
		file.Close()
	}

}


検索力が欲しい。後メール力。