我的環境是:apache+mysql+php
首先查看是否開啟了socket與openssl擴展

如果沒有那就找到php.ini檔案并打開,開啟這這個擴展
將extension=php_openssl.dll這個句代碼前的“;”去掉
php_sockets.dll
php_openssl.dll
發送郵件的代碼中確保有這兩句:
$mail->SMTPSecure = 'ssl'; //設定使用ssl加密方式登錄鑒權 $mail->Port = 465; //設定ssl連接smtp服務器的遠程服務器埠號 465
給防火墻添加465埠的訪問權限
之前我在本地測驗一直正常,換上阿里云服務器之后郵件發送失敗
是因為阿里云默認沒有開啟465埠的訪問權限
服務器開啟465安全組,最新的阿里云ECS可以直接在安全策略中配置
阿里云管理后臺->云服務器->網路和安全->安全組->自行配置

完成后重啟php和服務器
已經可以成功接收到郵件了,
補充一個小問題,我用alert彈出的中文顯示亂碼,本地測驗是Ok的
這是原來的代碼:
exit("<script charset='UTF-8'>alert(\"留言成功!\");location.href='".$_SERVER["HTTP_REFERER"]."'</script>");
然后改成了下面這句就不再亂碼了
echo '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>提示</title><script language=javascript>alert("留言成功!");location.href="'.$_SERVER["HTTP_REFERER"].'"</script></head></html>';
再補充一下phpmailer發送郵件出現標題或者內容或者提示資訊出現中文亂碼的情況
網上教程有很多,并不適合我
我自己摸索出來的代碼貼出來,大家可以試一試,行就行,不行您再找別的方案哈
//將留言發送到郵箱 //參考phpmailer核心檔案 require_once("PHPMailer/PHPMailer.php"); require_once("PHPMailer/SMTP.php"); session_start(); $mail = new PHPMailer\PHPMailer\PHPMailer(); $mail->isSMTP();// 使用SMTP服務 $mail->CharSet = "utf8";// 編碼格式為utf8,不設定編碼的話,中文會出現亂碼 $mail->Host = "smtp.xx.com";// 發送方的SMTP服務器地址 $mail->SMTPAuth = true;// 是否使用身份驗證 $mail->Username = "[email protected]";// 發件服務器郵箱 $mail->Password = "xxxxxxxx";//客戶端授權密碼,而不是郵箱的登錄密碼! $mail->SMTPSecure = "ssl";// 使用ssl協議方式 $mail->Port = 465;// qq埠465或587 $mail->setFrom("[email protected]", "cyy發的");// 設定發件人資訊,如郵件格式說明中的發件人 $mail->addAddress("[email protected]", "cyy2收的");// 設定收件人資訊,如郵件格式說明中的收件人 $mail->addReplyTo("[email protected]", "cyy發的"); // 設定回復人資訊,指收件人收到郵件后,如果要回復,回復郵件將發送到的郵箱地址 $mail->Subject = "郵件標題";// 郵件標題 $code=rand(100000,999999);//驗證碼 $_SESSION["code"] = $code; return $code."----".session("code"); $mail->Body = "郵件內容是 <b>您的驗證碼是:$code</b>,如果非本人操作無需理會!"; $mail->Body = "郵件正文"; $mail->AltBody = "This is the plain text純文本"; // 這個是設定純文本方式顯示的正文內容,如果不支持Html方式,就會用到這個,基本無用 if (!$mail->send()) { // 發送郵件 echo "Message could not be sent."; echo "Mailer Error: " . $mail->ErrorInfo;// 輸出錯誤資訊 } echo '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>提示</title><script language=javascript>alert("留言成功!");location.href="'.$_SERVER["HTTP_REFERER"].'"</script></head></html>';
發現在網頁端的郵箱中文的標題和正文都是正常的,但是用foxmail收取郵件出現亂碼
原因是foxmail默認使用西歐編碼,需要手動把亂碼的檔案編碼改為utf-8,比較麻煩
我又稍微修改了代碼
$mail->Subject = "=?UTF-8?B?".base64_encode($mes_sub)."?=";// 郵件標題
這句是標題轉碼,解決foxmail中標題亂碼問題
$mail->Body = $content;// 郵件正文 $mail->AltBody = $content;;
這里補充了純文本格式,如果html格式亂碼就用純文本格式
成功解決!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/77609.html
標籤:PHP
上一篇:ORA-54013: 不允許對虛擬列執行 INSERT 操作
下一篇:springBoot第一彈
