Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
擊上方藍色“Go語言中文網”關注我們,領全套Go資料,每天學習 Go 語言
發送郵件是一個很常見的需求:用戶郵箱驗證、郵箱召回等。Go 語言標準庫自帶 net/smtp 庫,實現了 smtp 協議,用于發送郵件。然而這個庫比較原始,使用不方便,而且官方聲明不再增加新功能。于是乎出現了一些強大的第三方郵件庫,今天推薦的這個庫就是其中之一。
項目地址:https://github.com/jordan-wright/email,Star 數 1.3k+。
email 包的設計易于使用,但又足夠靈活以免受到限制。目的是為開發者提供友好的電子郵件接口。
該包當前支持以下功能:
先安裝:
$ go get github.com/jordan-wright/email
后使用,使用 Gmail 發送郵件:
e := email.NewEmail()
e.From = "Jordan Wright <test@gmail.com>"
e.To = []string{"test@example.com"}
e.Bcc = []string{"test_bcc@example.com"}
e.Cc = []string{"test_cc@example.com"}
e.Subject = "Awesome Subject"
e.Text = []byte("Text Body is, of course, supported!")
e.HTML = []byte("<h1>Fancy HTML is supported, too!</h1>")
e.Send("smtp.gmail.com:587", smtp.PlainAuth("", "test@gmail.com", "password123", "smtp.gmail.com"))
可見該庫最終還是使用標準庫 net/smtp 進行實際的郵件發送。
e.From = "Go語言中文網<polaris@studygolang.com>”
收到的郵件不會顯示發件人,有人提了一個 PR 支持 non-US-ASCII,但還未被 merge;根據該 PR 的提示,我們可以這樣解決此問題:
e.From = mime.QEncoding.Encode("UTF-8", "Go語言中文網") + "<polaris@studygolang.com>"
tlsConfig := &tls.Config{
InsecureSkipVerify: true,
ServerName: smtpHost,
}
e.SendWithTLS(addr, auth, tlsConfig)
如果郵件中需要帶上附件,這個庫很方便:
e.AttachFile("test.txt")
也可以是通過 io.Reader 讀取文件:
func (e *Email) Attach(r io.Reader, filename string, c string) (a *Attachment, err error)
其中 filename 是放入附件顯示的文件名,c 是 Content-Type,如果為空,則使用 application/octet-stream。
該庫還支持連接池,例如:
p, err := email.NewPool(
"smtp.qq.com:25",
4,
smtp.PlainAuth("", "274768166@qq.com", "password", "smtp.qq.com"))
通過 p 的 Send 方法執行發送操作:
p.Send(e, 10e9)
完整例子如下:
package main
import (
"log"
"mime"
"net/smtp"
"net/textproto"
"strconv"
"sync"
"github.com/jordan-wright/email"
)
func main() {
var wg sync.WaitGroup
ch := make(chan *email.Email, 4)
err := sendEmailByPool(ch, &wg)
if err != nil {
panic(err)
}
for i := 0; i < 4; i++ {
wg.Add(1)
ch <- &email.Email{
To: []string{"polaris@studygolang.com"},
From: mime.QEncoding.Encode("UTF-8", "Go語言中文網") + "<274768166@qq.com>",
Subject: "Pool" + strconv.Itoa(i),
HTML: []byte("<h1>這是 HTML 正文</h1>"),
Headers: textproto.MIMEHeader{},
}
}
wg.Wait()
close(ch)
}
func sendEmailByPool(ch <-chan *email.Email, wg *sync.WaitGroup) error {
p, err := email.NewPool(
"smtp.qq.com:25",
4,
smtp.PlainAuth("", "274768166@qq.com", "password", "smtp.qq.com"))
if err != nil {
return err
}
for i := 0; i < 4; i++ {
go func() {
for e := range ch {
err := p.Send(e, 10e9)
if err != nil {
log.Println("Send Email fail, err:", err)
} else {
log.Println("Send Email Successfully!")
}
wg.Done()
}
}()
}
return nil
}
通過上面的介紹,你應該掌握了該庫的使用,該庫是不是滿足了你對發郵件的需求?
最后附上一個完整的帶附件的發郵件程序:
package main
import (
"log"
"mime"
"net/smtp"
"strings"
"github.com/jordan-wright/email"
)
func main() {
sendEmail("測試第三方 email 庫", "xuxinhua@studygolang.com")
}
func sendEmail(subject string, tos ...string) error {
e := email.NewEmail()
smtpUsername := "274768166@qq.com"
e.From = mime.QEncoding.Encode("UTF-8", "Go語言中文網") + "<274768166@qq.com>"
e.To = tos
e.Subject = subject
e.HTML = []byte("<h1>HTML 正文</h1>")
e.AttachFile("zap.log")
auth := smtp.PlainAuth("", smtpUsername, "password", "smtp.qq.com")
err := e.Send("smtp.qq.com:25", auth)
if err != nil {
log.Println("Send Mail to", strings.Join(tos, ","), "error:", err)
return err
}
log.Println("Send Mail to", strings.Join(tos, ","), "Successfully")
return nil
}
這個適合初學者的指南中,你將學習如何創建一個響應式電子郵件模板。你將跟隨逐步說明以及代碼片段設計一個在任何設備上都看起來很棒的電子郵件模板。
這個項目非常適合渴望掌握電子郵件設計基礎的新手!
(本文視頻講解:java567.com)
、為什么需要表單驗證?
表單是Web開發中常用的交互元素,用戶通過表單提交數據給后端進行處理。然而,用戶輸入的數據不可靠,因此需要進行表單驗證,確保用戶輸入的數據符合預期。
二、基本的表單驗證規則
必填字段:確保用戶填寫了必填字段,如用戶名、密碼等。
格式驗證:驗證用戶輸入的數據格式是否正確,如郵箱、手機號、日期等。
長度驗證:驗證用戶輸入的數據長度是否符合要求,如密碼長度、字符數等。
數字范圍驗證:驗證用戶輸入的數字是否在指定范圍內,如年齡、價格等。
一致性驗證:驗證兩個或多個輸入字段的值是否一致,如密碼確認、郵箱確認等。
三、使用JavaScript進行表單驗證的步驟
1、獲取表單元素:
const form = document.getElementById('myForm');
2、監聽表單提交事件:
form.addEventListener('submit', function(event) {
event.preventDefault(); // 阻止表單的默認提交行為
// 表單驗證邏輯
});
3、編寫驗證函數:
function validateForm() {
// 獲取表單字段的值
const username = document.getElementById('username').value;
const email = document.getElementById('email').value;
// 必填字段驗證
if (username === '' || email === '') {
alert('用戶名和郵箱不能為空!');
return false;
}
// 郵箱格式驗證
const emailRegex = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
if (!emailRegex.test(email)) {
alert('請輸入正確的郵箱格式!');
return false;
}
// 其他驗證邏輯...
return true; // 表單驗證通過
}
4、表單驗證:
form.addEventListener('submit', function(event) {
event.preventDefault(); // 阻止表單的默認提交行為
if (validateForm()) {
form.submit(); // 提交表單
}
});
5、錯誤提示:
<form id="myForm">
<label for="username">用戶名:</label>
<input type="text" id="username" required>
<br>
<label for="email">郵箱:</label>
<input type="email" id="email" required>
<br>
<button type="submit">提交</button>
</form>
在以上示例中,我們通過JavaScript實現了對用戶名和郵箱字段的表單驗證。在提交表單時,會先調用validateForm函數進行驗證,如果驗證通過則提交表單,否則提示錯誤信息。
四、常用的表單驗證技巧
使用正則表達式進行格式驗證,如郵箱、手機號等。
使用HTML5表單驗證屬性,如required、pattern、min、max等。
使用第三方表單驗證插件,如jQuery Validation等,簡化表單驗證的編寫。
五、表單驗證的優化與提升
實時驗證:使用input或change事件實時驗證用戶輸入,及時提醒用戶輸入錯誤。
提示友好:使用合適的提示方式,如文字提示、圖標提示等,讓用戶易于理解和操作。
全局驗證:在表單提交之前對整個表單進行驗證,確保所有字段的正確性。
客戶端與服務器端驗證:前端表單驗證只是為了提高用戶體驗和減少無效請求,真正的安全性還需要服務器端驗證。
通過以上步驟和技巧,你可以使用JavaScript輕松實現表單驗證,為用戶提供安全智能的交互體驗!不僅能提高用戶滿意度,也能讓你在前端開發領域脫穎而出!快來學習吧!
六、總結
表單驗證在Web開發中扮演著重要的角色,通過JavaScript的靈活運用,可以實現各種表單驗證需求。合理的表單驗證不僅能提升用戶體驗,還能保障數據的準確性和安全性。希望本文能夠幫助你掌握JavaScript表單驗證的基本技巧和優化方法,打造安全智能的用戶交互體驗!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。