Rumah  >  Artikel  >  pembangunan bahagian belakang  >  peti surat golang kod kacau

peti surat golang kod kacau

PHPz
PHPzasal
2023-05-19 10:37:37557semak imbas

Dalam beberapa tahun kebelakangan ini, dengan aplikasi meluas bahasa Go dalam pembangunan bahagian belakang, semakin ramai pembangun telah mula menggunakan Golang untuk pemprosesan berkaitan peti mel. Walau bagaimanapun, semasa proses ini, ramai orang akan menghadapi masalah biasa, iaitu peti mel bercelaru. Artikel ini akan memberikan pengenalan ringkas dan penyelesaian kepada masalah ini.

1. Apakah alamat e-mel yang bercelaru?

Apabila menggunakan Golang untuk pemprosesan e-mel, kadangkala akan terdapat aksara Cina yang kacau dalam lampiran, atau aksara Cina yang kacau dalam penerima dan pengirim. Keadaan ini biasanya disebabkan oleh kaedah penghantaran e-mel lalai yang digunakan oleh Golang yang tidak menyokong pengekodan bahasa Cina.

2. Mengapakah alamat e-mel bercelaru?

Dalam pustaka standard Golang, DefaultSender (pengirim lalai) dan DefaultCharset (pengekodan lalai) digunakan untuk menghantar e-mel. Oleh kerana DefaultCharset lalai kepada pengekodan AS-ASCII, aksara Cina tidak boleh ditukar dengan betul, mengakibatkan aksara bercelaru. Pada masa yang sama, jika anda ingin menggunakan pengekodan Base64, anda perlu menambah maklumat Pengepala yang berkaitan secara manual, jika tidak, aksara bercelaru masih akan muncul.

3. Bagaimana untuk menyelesaikan masalah e-mel bercelaru?

Untuk masalah ini, terdapat beberapa penyelesaian:

  1. Gunakan perpustakaan penghantaran e-mel pihak ketiga

Jika anda tidak mahu menyelesaikan masalah ini masalah diri sendiri Untuk pemprosesan, anda boleh mempertimbangkan untuk menggunakan perpustakaan penghantaran e-mel pihak ketiga, seperti net/smtp dan gomail. Perpustakaan ini telah pun melaksanakan sokongan untuk pengekodan bahasa Cina, yang boleh mengelakkan masalah aksara bercelaru.

  1. Ubah suai maklumat pengepala e-mel

Jika anda perlu menghantar e-mel sendiri, anda boleh mengubah suai maklumat pengepala e-mel yang berkaitan sebelum menghantar e-mel. Langkah-langkah khusus adalah seperti berikut:

  • Tukar pengekodan bahasa Cina melalui e-mel.Header.

Contohnya:

from := "发件人姓名<发件邮箱地址>"
to := "收件人姓名<收件邮箱地址>"
subject := "邮件主题"
body := "邮件内容"

header := make(map[string]string)
header["From"] = email.Header("From", from).String()
header["To"] = email.Header("To", to).String()
header["Subject"] = email.Header("Subject", subject).String()
  • Gunakan base64 untuk mengekod subjek e-mel.

Contohnya:

header["Subject"] = "=?UTF-8?B?" + base64.StdEncoding.EncodeToString([]byte(subject)) + "?="
  • Ubah suai pengirim e-mel dan maklumat pelayan SMTP.

Contohnya:

smtpServer := "smtp服务器地址"
auth := smtp.PlainAuth("", "认证邮箱地址", "认证邮箱密码", smtpServer)
smtpSender := "认证邮箱地址"
  • Hantar mel

Contohnya:

message := ""
for k, v := range header {
    message += fmt.Sprintf("%s: %s
", k, v)
}
message += "Content-Type: text/plain; charset=UTF-8

" + body

err := smtp.SendMail(smtpServer, auth, smtpSender, []string{"收件人邮箱地址"}, []byte(message))
if err != nil {
    log.Fatal(err)
}
  1. Gunakan perpustakaan mime Golang

Jika anda menggunakan Golang versi 1.6 ke atas, anda boleh mempertimbangkan untuk menggunakan pustaka mime untuk menukar pengekodan e-mel. Langkah khusus adalah seperti berikut:

  • Gunakan mime.QEncoding untuk menukar pengekodan bahasa Cina.

Contohnya:

from := "发件人姓名<发件邮箱地址>"
to := "收件人姓名<收件邮箱地址>"
subject := "邮件主题"
body := "邮件内容"

header := make(map[string]string)
header["From"] = mime.QEncoding.Encode("UTF-8", from)
header["To"] = mime.QEncoding.Encode("UTF-8", to)
header["Subject"] = mime.QEncoding.Encode("UTF-8", subject)
  • Gunakan base64 untuk mengekod subjek e-mel.

Contohnya:

header["Subject"] = "=?UTF-8?B?" + base64.StdEncoding.EncodeToString([]byte(subject)) + "?="
  • Ubah suai pengirim e-mel dan maklumat pelayan SMTP.

Contohnya:

smtpServer := "smtp服务器地址"
auth := smtp.PlainAuth("", "认证邮箱地址", "认证邮箱密码", smtpServer)
smtpSender := "认证邮箱地址"
  • Hantar e-mel

Contohnya:

message := ""
for k, v := range header {
    message += fmt.Sprintf("%s: %s
", k, v)
}
message += "Content-Type: text/plain; charset=UTF-8

" + body

err := smtp.SendMail(smtpServer, auth, smtpSender, []string{"收件人邮箱地址"}, []byte(message))
if err != nil {
    log.Fatal(err)
}

Golang boleh diselesaikan dengan perkara di atas kaedah Terdapat masalah dengan aksara bercelaru dalam peti mel.

Ringkasan:

Pengekodan Cina ialah masalah biasa dalam penghantaran e-mel, tetapi tidak perlu terlalu risau apabila menggunakan Golang untuk pemprosesan e-mel. Melalui penyelesaian di atas, anda boleh menyelesaikan masalah watak bercelaru dengan mudah dan menjadikan pemprosesan e-mel anda lebih lengkap dan profesional.

Atas ialah kandungan terperinci peti surat golang kod kacau. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn