使用Golang API发送邮件的实现方法
使用Golang API发送邮件的实现方法 我有一些JavaScript代码,想通过Go的Gin框架发送邮件,你有什么想法可以实现这个功能吗?
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="overlay">
<form onsubmit="event.preventDefault(); validateForm()">
<h1>Contact Us</h1>
<label for="name"> Name:</label>
<input type="text" id="name" placeholder="Your name">
<small class="error"></small>
<label for="email"> Email: </label>
<input type="text" id="email" placeholder="Your email">
<small class="error"></small>
<label for="message">Message:</label>
<textarea id="message" placeholder="Your message" rows="6"></textarea>
<small class="error"></small>
<div class="center">
<input type="submit" value="Send Message">
<p id="success"></p>
</div>
</form>
</div>
<script src="script.js"></script>
</body>
</html>
script.js
const nameInput = document.querySelector("#name");
const email = document.querySelector("#email");
const message = document.querySelector("#message");
const success = document.querySelector("#success");
const errorNodes = document.querySelectorAll(".error");
// Validate data
function validateForm() {
clearMessages();
let errorFlang=false;
if (nameInput.value.length < 1) {
errorNodes[0].innerText = "lütfen adınızı girirniz";
nameInput.classList.add("error-border");
errorFlang=true;
}
if (!emailIsValid(email.value)) {
errorNodes[1].innerText = "lütfen mail adresi giriniz";
nameInput.classList.add("error-border");
errorFlang=true;
}
if (message.value.length < 1) {
errorNodes[2].innerText = "lütfen mesajınızı giriniz";
message.classList.add("error-border");
errorFlang=true;
}
if (!errorFlag) {
success.innerText="başarılı";
}
}
// Clear error / success messages
function clearMessages() {
for (let i = 0; i < errorNodes.length; i++) {
errorNodes[i].innerText = "";
}
success.innerText="";
nameInput.classList.remove("error-border");
email.classList.remove("error-border");
message.classList.remove("error-border");
}
// Check if email is valid
function emailIsValid(email) {
let pattern = /\S+@\S+\.\S+/;
return pattern.test(email);
}
更多关于使用Golang API发送邮件的实现方法的实战教程也可以访问 https://www.itying.com/category-94-b0.html
3 回复
更多关于使用Golang API发送邮件的实现方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用 NewSMTPClient 函数创建一个 STMPClient 对象。… 使用 NewMSG 创建一封新的电子邮件。… 之后,您需要使用 server 连接到 SMTP 服务器。… 连接成功后,只需使用 email 函数发送电子邮件(或您想要发送的所有电子邮件)。 更多详情请访问我的网站
package main
import (
"fmt"
"net/http"
"net/smtp"
"github.com/gin-gonic/gin"
)
type ContactForm struct {
Name string `json:"name" binding:"required"`
Email string `json:"email" binding:"required,email"`
Message string `json:"message" binding:"required"`
}
func main() {
r := gin.Default()
// 静态文件服务
r.Static("/static", "./static")
r.LoadHTMLGlob("templates/*")
r.GET("/", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.html", nil)
})
// 邮件发送API端点
r.POST("/send-email", sendEmailHandler)
r.Run(":8080")
}
func sendEmailHandler(c *gin.Context) {
var form ContactForm
if err := c.ShouldBindJSON(&form); err != nil {
c.JSON(http.StatusBadRequest, gin.H{
"error": "无效的表单数据",
"details": err.Error(),
})
return
}
// 配置SMTP
smtpHost := "smtp.gmail.com"
smtpPort := "587"
from := "your-email@gmail.com"
password := "your-app-password" // 使用应用专用密码
to := []string{"recipient@example.com"}
// 邮件内容
subject := "新联系表单提交"
body := fmt.Sprintf("姓名: %s\n邮箱: %s\n\n消息:\n%s",
form.Name, form.Email, form.Message)
msg := []byte("To: " + to[0] + "\r\n" +
"Subject: " + subject + "\r\n" +
"\r\n" + body + "\r\n")
// 认证并发送
auth := smtp.PlainAuth("", from, password, smtpHost)
err := smtp.SendMail(smtpHost+":"+smtpPort, auth, from, to, msg)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{
"error": "邮件发送失败",
"details": err.Error(),
})
return
}
c.JSON(http.StatusOK, gin.H{
"success": true,
"message": "邮件发送成功",
})
}
// script.js 更新部分
function validateForm() {
clearMessages();
let errorFlag = false;
if (nameInput.value.length < 1) {
errorNodes[0].innerText = "lütfen adınızı girirniz";
nameInput.classList.add("error-border");
errorFlag = true;
}
if (!emailIsValid(email.value)) {
errorNodes[1].innerText = "lütfen mail adresi giriniz";
email.classList.add("error-border");
errorFlag = true;
}
if (message.value.length < 1) {
errorNodes[2].innerText = "lütfen mesajınızı giriniz";
message.classList.add("error-border");
errorFlag = true;
}
if (!errorFlag) {
sendToBackend();
}
}
async function sendToBackend() {
const formData = {
name: nameInput.value,
email: email.value,
message: message.value
};
try {
const response = await fetch('/send-email', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(formData)
});
const result = await response.json();
if (response.ok) {
success.innerText = "Mesaj başarıyla gönderildi!";
clearForm();
} else {
success.innerText = "Hata: " + result.error;
}
} catch (error) {
success.innerText = "Bağlantı hatası: " + error.message;
}
}
function clearForm() {
nameInput.value = "";
email.value = "";
message.value = "";
}
<!-- templates/index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Contact Form</title>
</head>
<body>
<div id="overlay">
<form onsubmit="event.preventDefault(); validateForm()">
<h1>Contact Us</h1>
<label for="name">Name:</label>
<input type="text" id="name" placeholder="Your name">
<small class="error"></small>
<label for="email">Email:</label>
<input type="text" id="email" placeholder="Your email">
<small class="error"></small>
<label for="message">Message:</label>
<textarea id="message" placeholder="Your message" rows="6"></textarea>
<small class="error"></small>
<div class="center">
<input type="submit" value="Send Message">
<p id="success"></p>
</div>
</form>
</div>
<script src="/static/script.js"></script>
</body>
</html>
// 使用gomail库的替代方案
package main
import (
"github.com/gin-gonic/gin"
"gopkg.in/gomail.v2"
)
func sendEmailWithGomail(c *gin.Context) {
var form ContactForm
if err := c.ShouldBindJSON(&form); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
m := gomail.NewMessage()
m.SetHeader("From", "sender@example.com")
m.SetHeader("To", "recipient@example.com")
m.SetHeader("Subject", "New Contact Form Submission")
m.SetBody("text/plain",
fmt.Sprintf("Name: %s\nEmail: %s\nMessage: %s",
form.Name, form.Email, form.Message))
d := gomail.NewDialer("smtp.gmail.com", 587,
"your-email@gmail.com", "your-password")
if err := d.DialAndSend(m); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"message": "Email sent successfully"})
}

