اتصال به ایمیل‌سرور در برنامه‌های Golang


پروژه و کدهای مورد استفاده در ویدیوی فوق در اینجا قابل مشاهده و دسترسی هستند.

برای استفاده از سرویس ایمیل در برنامه‌های Golang، می‌توانید از پکیج gomail استفاده کنید که بایستی با دستور زیر، آن را در پروژه خود، نصب کنید:

کپی
go get gopkg.in/gomail.v2

پس از آن، کافیست تا طبق مستندات SMTP، یک دسترسی SMTP و طبق مستندات افزودن نشانی، یک نشانی برای ایمیل‌سرور خود، ایجاد کنید. در نهایت نیز، بایستی اطلاعات مربوط به ایمیل‌سرور خود را به متغیرهای محیطی برنامه خود، اضافه کنید؛ به عنوان مثال:

کپی
MAIL_HOST=smtp.c1.liara.email
MAIL_PORT=587
MAIL_USER=cranky_galileo_nhh78l
MAIL_PASSWORD=7ae28d03-2e09-4211-8e79-c3a54ae5798e
MAIL_FROM=info@example.com

مقدار MAIL_FROM، باید یکی از نشانی‌های اضافه شده در سرویس ایمیل باشد.

در نهایت می‌توانید در پروژه‌ی خود مانند مثال زیر عمل کرده و با استفاده از دسترسی SMTP سرویس ایمیل لیارا، اقدام به ارسال ایمیل‌های تراکنشی کنید:

کپی
package main

import (
    "fmt"
    "log"
    "os"
    "strconv"

    gomail "gopkg.in/gomail.v2"
)

func main() {
    
    // Get environment variables for SMTP settings
    mailHost := os.Getenv("MAIL_HOST")
    mailPortStr := os.Getenv("MAIL_PORT")
    mailUser := os.Getenv("MAIL_USER")
    mailPassword := os.Getenv("MAIL_PASSWORD")
    mailFrom := os.Getenv("MAIL_FROM")

    // Convert mail port from string to integer
    mailPort, err := strconv.Atoi(mailPortStr)
    if err != nil {
        log.Fatalf("Invalid MAIL_PORT: %v", err)
    }

    // Create a new email message
    m := gomail.NewMessage()
    m.SetHeader("From", mailFrom)
    m.SetHeader("To", "recipient@example.com") // Set recipient email here
    m.SetHeader("Subject", "Test Email from Go with HTML")
    m.SetHeader("x-liara-tag", "test-tag") // Custom header for tagging

    // Set HTML body for the email
    m.SetBody("text/html", `
        <h1>This is a test email</h1>
        <p>Sent from Go using <b>gomail</b> and SMTP with TLS.</p>
    `)

    // Create SMTP dialer with TLS
    d := gomail.NewDialer(mailHost, mailPort, mailUser, mailPassword)

    // Send the email
    if err := d.DialAndSend(m); err != nil {
        log.Fatalf("Failed to send email: %v", err)
    }

    fmt.Println("Test email sent successfully!")
}

برای ارسال امن‌تر ایمیل‌ها، می‌توانید مقدار Port را بر روی 465 تنظیم کنید. با انجام این کار، از TLS به جای STARTTLS، استفاده خواهید کرد.