From 40200a46496e5c53f7575a0155f8f3a15e54081a Mon Sep 17 00:00:00 2001 From: A'zamov Samandar Date: Thu, 24 Apr 2025 23:26:46 +0500 Subject: [PATCH] notification serviceda email xabar yuborish qo'shildi --- .env.example | 5 +++++ .gitignore | 4 ++-- internal/domain/email.go | 5 +++++ internal/notifier/email.go | 12 ++++++++---- internal/services/email.go | 33 +++++++++++++++++++++++++++++++++ test.py | 17 +++++++++++++++++ tmp/build-errors.log | 2 +- 7 files changed, 71 insertions(+), 7 deletions(-) create mode 100644 internal/domain/email.go create mode 100644 internal/services/email.go create mode 100644 test.py diff --git a/.env.example b/.env.example index 54202b8..cc15a2a 100644 --- a/.env.example +++ b/.env.example @@ -10,6 +10,11 @@ ESKIZ_USER="admin@gmail.com" ESKIZ_PASSWORD="password" ESKIZ_FROM="4546" +MAIL_DOMAIN=smtp.gmail.com +MAIL_USER="JscorpTech@gmail.com" +MAIL_PASSWORD="app password" +MAIL_PORT=587 + PMB_DOMAIN="" PMB_USER="" PMB_PASSWORD="" \ No newline at end of file diff --git a/.gitignore b/.gitignore index 61a32ec..393dd68 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ .env -./bin -./main \ No newline at end of file +bin +main \ No newline at end of file diff --git a/internal/domain/email.go b/internal/domain/email.go new file mode 100644 index 0000000..4e587ea --- /dev/null +++ b/internal/domain/email.go @@ -0,0 +1,5 @@ +package domain + +type EmailServicePort interface { + SendMail([]string, []byte) +} diff --git a/internal/notifier/email.go b/internal/notifier/email.go index fb4b52d..f354d1e 100644 --- a/internal/notifier/email.go +++ b/internal/notifier/email.go @@ -2,15 +2,19 @@ package notifier import ( "github.com/JscorpTech/notification/internal/domain" - "github.com/k0kubun/pp/v3" + "github.com/JscorpTech/notification/internal/services" ) -type emailNotifier struct{} +type emailNotifier struct { + EmailService domain.EmailServicePort +} func NewEmailNotifier() domain.NotifierPort { - return &emailNotifier{} + return &emailNotifier{ + EmailService: services.NewEmailService(), + } } func (n *emailNotifier) SendMessage(to []string, body string) { - pp.Print(to, body) + n.EmailService.SendMail(to, []byte(body)) } diff --git a/internal/services/email.go b/internal/services/email.go new file mode 100644 index 0000000..9e22e1a --- /dev/null +++ b/internal/services/email.go @@ -0,0 +1,33 @@ +package services + +import ( + "fmt" + "net/smtp" + "os" + + "github.com/JscorpTech/notification/internal/domain" +) + +type emailService struct{} + +func NewEmailService() domain.EmailServicePort { + return &emailService{} +} + +func (e *emailService) SendMail(to []string, body []byte) { + // Gmail konfiguratsiyasi + from := os.Getenv("MAIL_USER") + password := os.Getenv("MAIL_PASSWORD") + smtpHost := os.Getenv("MAIL_DOMAIN") + smtpPort := os.Getenv("MAIL_PORT") + + auth := smtp.PlainAuth("", from, password, smtpHost) + + err := smtp.SendMail(smtpHost+":"+smtpPort, auth, from, to, body) + if err != nil { + fmt.Println("Xatolik:", err) + return + } + + fmt.Println("Email yuborildi!") +} diff --git a/test.py b/test.py new file mode 100644 index 0000000..5062681 --- /dev/null +++ b/test.py @@ -0,0 +1,17 @@ +from kombu import Connection, Exchange, Producer + +# RabbitMQ ulanishi +rabbit_url = 'amqp://guest:guest@127.0.0.1:5672/' +connection = Connection(rabbit_url) +channel = connection.channel() + +exchange = Exchange('notification', type='direct') + +# Producer yaratish +producer = Producer(channel, exchange=exchange, routing_key="notification") + +# Xabar yuborish +message = {'type': 'email', 'message': "Subject: test\r\n\r\nclasscom.uz sayti va mobil ilovasiga ro'yxatdan o'tishingingiz uchun tasdiqlash kodi: 1234", "to": ["JscorpTech@gmail.com", "admin@jscorp.uz"]} +producer.publish(message) + +print("Message sent to all workers!") \ No newline at end of file diff --git a/tmp/build-errors.log b/tmp/build-errors.log index 94241fd..31fcaad 100644 --- a/tmp/build-errors.log +++ b/tmp/build-errors.log @@ -1 +1 @@ -exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1 \ No newline at end of file +exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1 \ No newline at end of file