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:
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.
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:
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()
Contohnya:
header["Subject"] = "=?UTF-8?B?" + base64.StdEncoding.EncodeToString([]byte(subject)) + "?="
Contohnya:
smtpServer := "smtp服务器地址" auth := smtp.PlainAuth("", "认证邮箱地址", "认证邮箱密码", smtpServer) smtpSender := "认证邮箱地址"
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) }
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:
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)
Contohnya:
header["Subject"] = "=?UTF-8?B?" + base64.StdEncoding.EncodeToString([]byte(subject)) + "?="
Contohnya:
smtpServer := "smtp服务器地址" auth := smtp.PlainAuth("", "认证邮箱地址", "认证邮箱密码", smtpServer) smtpSender := "认证邮箱地址"
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!