Smtp로 Rabbitile 메일 서비스 보내기

17722 단어 fibersmtprabbitmqgo
Selamlar Ben Tayfur Kaya yeni Golangğreniyorum ve sizeğrenirken yaşadğğm zorluklarıve avantajlarıbu projede göstermek istiyorum.
Bugün go dilile yazm Oldu um basit bir 이메일 서비스
kulland Teknolojiler RabbitMQ, Smtp, Optical ve Gorm
Github Reposuna gitmek istiyorsanızGithub

Stmp


Golang ile basit bir sekilde gνnderici olan mail adresine giri yaparak istedi 이메일adresine mesaj ıhtml 템플릿 olarak gνnderece ğiz

Html nas 분석 edilir?






 template.ParseFiles("./Templates/FeatureNotification.html")

yukarıda html dosyasınıparse ediyoruz

저는 ediyoruz buradaki 임무를 수행하는 아키다키 지비입니다. 제목이'yaz ıyoruz'인 글에서 kıiseg 섬deriecek



templateBuffer.Write([]byte(fmt.Sprintf("Subject: Lates Features \n%s\n\n", mimeHeaders)))
    t.Execute(&templateBuffer, nil)

Smtp 메일





sendMail fonksiyonu hangi consumerden triggerlandıysa ilgili htmli parse ediyoruz



    switch tamplate {
    case "WelcomeQueue":
        body = parseHtml.WelcomeTemplate()
        break
    case "WeeklyReportQueue":
        body = parseHtml.WeeklyReportTemplate()
        break
    case "FeatureNotificationQueue":
        body = parseHtml.FeatureNotificationTemplate()
        break
    }


err := smtp.SendMail(smtpHost+":"+smtpPort, auth, senderMail, to, []byte(body))

yukaradaki kod bloğunda mail adresimize authentication Oldyoruz ve oldugumuz email adresinden to göndereceğimiz mail adresini içeriyor.msg ksm sm iseg νnderilecek olan mesaj çiyor ama biz orada bir mesaj yerine html 템플릿 gνnderece ğiz


RabbitMQ


이것은 좋은 예입니다



Evet var ççnküg≠nderecek oldugumuz mailleri 메시지 대기열

buildermemiz gerekiyor, yapt ız 응용 프로그램 belki databaseden ald ız mail adreslerine email 또는 Arken yarında 응용 프로그램 crashe Olabilityve biz hangi mail adreslerine mail 또는 Arken yarıs ında 응용 프로그램p>

Birden fazla 이메일 템플릿화 olabilir mesela 환영, 검증, 기능 알림gibi Farketiging gibi baz Bulk Bulk (toplu g섬derilen) 메일baz Balar 거래 (tekli) 메일


Biz her template icin bir Consume ve Publish oluşturacağz böylelike mail adresleri ilkönce queue gidicek sonra Consume“a iletilecek ve oradan templatine göre smtp ile maili göndereceğiz=)


Publish


RabbitMQ bağlantısıoluşturuyoruz



connectRabbitMQ, err := amqp.Dial(amqpServerURL)


bir channel olu turuyoruz에서 ile haberle şmek iç
소비



channelRabbitMQ, err := connectRabbitMQ.Channel()



yeni bir mesaj oluque bubunuqueug gender iyoruz ama burda burdakin burmes mesaj bubububuquegqueggggnderiyoryyyyounnnn\23111૶ r涜 yerden alıyor mesaj'iıoquequeismine ismine gmine gggge ggege ggerggge buder buder buder buder buder buder buder buderyderyder가 Aryzzzhhhhhhhhhhyyyde 주 주 주



    message := amqp.Publishing{
        ContentType: "text/plain",
        Body:        msg,
    }

    // mesaji publish eder.
    if err := channelRabbitMQ.Publish(
        "",// exchange
        queueName,// queue name
        false,
        false,
        message,
    ); err != nil {
        return err
    }





Consume


buradaki işlemlerde aynısayılır ama bir farkla=)

줄을 서서 deki mesajlar Okuy가 bir send Mail Fonksiyonu trigger ediyor에 그녀를 추가한 mesaj iç



    forever := make(chan bool)
    go func() {
        for message := range messages {
            to := []string{string(message.Body)}
            //queue'dan gelen mesaji mail.Send fonksiyonuna gönder
            mail.SendMail(to, queueName)
            log.Printf(" > Received message: %s\n", message.Body)
        }
    }()

    <-forever




Bulk Mail & Transaction Mail


유카리다 부이키신덴 바세트미 제네르 안란다 토플루 그드레렌 메르르 부이키신덴 바세트미 제네르 안란다 토플루 그드레렌 메르르 부이키신덴 바세트, 그는 그드레렌 메르르르엘의 거래 우편 거부 편지에



    db, err := db.ConnectDB()
    if err != nil {
        log.Fatal(err)
        panic(err)
    }
    var User []models.User
    db.Find(&User)


yukar diye ba lan pdbdeki 사용자 lar hepsini arrayin içine al ıyoruz

AşAşAş Aşda는 d捞ngüs üne al ıp의 사용자인 "ın maili için[] 바이트 Ad捞nüt ür üp bunuqueue g捞nderiyoruz burada[] 바이트 Ad捞nüt ürmemizin sebebit MQ channeli 바이트 iberlehaberle입니다.



    for _, t := range User {
        var to []byte
        to = []byte(t.Email)
        rabbitmq.Publisher(to, template)
    }





트랜잭션 메일 주소: ise farkl\farkl\lemler yap\labilir ama biz bir halde fiber endpoint inden gelen 메일 주소: 이메일 주소: g≠nderece\iz





Main


주요 재단 구성원 ile büt ün Consumerri dinliyoruz bunlar hep a ıyor queue herhangi bir mail girdi ğ inde direkt bunlar 脚leme g νnderecek



WelcomeQueue := "WelcomeQueue"
    WeeklyReportQueue := "WeeklyReportQueue"
    FeatureNotificationQueue := "FeatureNotificationQueue"
    // consumelari dinliyoruz
    go rabbitmq.Consume(WeeklyReportQueue)
    go rabbitmq.Consume(FeatureNotificationQueue)
    go rabbitmq.Consume(WelcomeQueue)


데디움 지블레리 론드리켄 론드리켄 섬유 단점은 복잡한 건축군을 촉발시켰다. 이 건축군은 에밀 디에니의 쿠란 크론디에 건축군 안에 위치하고 이를 세계 각지로 확장시켰다.



    app := fiber.New()
    app.Use(
        logger.New(), // add simple logger
    )

    app.Get("/FeatureNotification", func(c *fiber.Ctx) error {
        go logic.BulkMail(FeatureNotificationQueue)
        return c.SendString("Feature notification Sended")
    })
    app.Get("/WelcomeNotification", func(c *fiber.Ctx) error {
        msg := []byte(c.Query("msg"))
        logic.Transactional(msg,WelcomeQueue)
        return c.SendString("Welcome Sended to "+string(msg))
    })




conclusion


이번 회의의 주요 의제는 모든 변수를 다른 변수로 전환하는 방법에 관한 서비스를 제공하는 것입니다.

우마르 아즈미 시니즈딜, 아즈무 아누르 아즈미 아즈마 알, 아즈마 알, 아즈마 알, 디르림 엘리언던 게르디오인스

좋은 웹페이지 즐겨찾기