国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

郵件發送那點事

acrazing / 3217人閱讀

摘要:配置在中,修改為,這樣的函數就可以發出正常的郵件了。沒找到哪兒改,所以我就直接用發送了。同時,郵件發送是一個耗時操作,不應該讓進程長時間等待。相對復雜一些,它會對郵件內容進行簽名,然后收件服務器通過獲取公鑰,核對簽名是否正確。

搭建Postfix

操作系統我個人比較喜歡CentOs,原生的系統都裝有,沒有的話 可以自己谷歌,這個很簡單 ,跳過。需要注意的是,Postfix默認只對本地IP的Client開放,因為我們是用PHP調用Postfix發送,所以沒有修改。

配置PHP

在php.ini中,修改sendmail_path 為 /usr/sbin/sendmail -t -i , 這樣PHP的Mail函數就可以發出正常的郵件了。
用Mail函數直接發送會有些小麻煩,除了編碼,它會把from寫成 www-data@yourserverdomain.com 。沒找到哪兒改,所以我就直接用PHPMailer發送了。

$mail = $GLOBALS["LP_MAILER"];
$mail->CharSet = "UTF-8";
$mail->Encoding = "base64";
$mail->MessageID = $mid . "@".c("mail_domain");

$mail->SetFrom( c("mail_from") );
$mail->AddReplyTo( c("mail_from") );

$mail->Subject = $subject ;
$mail->WordWrap = 50;
$mail->MsgHTML($body);
$mail->AddAddress( $to );

if(!$mail->Send())
{
    $GLOBALS["LP_MAILER_ERROR"] = $mail->ErrorInfo;
    return false;
}
else
{
    $mail->ClearAddresses();
    return true;
}

在PHPMailer中發送的時候是可以隨意指定from的,不過別開心,from和實際發信用戶不同時,郵件在很多系統都會被標記成垃圾郵件的。同時,郵件發送是一個耗時操作,不應該讓web進程長時間等待。否則,稍微有點并發服務器就要掛了。怎么辦?那就做個實時隊列唄。

Redis隊列

別用cron來做隊列,土。其實Redis從某版本開始,提供了阻塞讀的Pub/Sub服務。這個東西用來做實時隊列非常好用,但是如果這redis服務壓力很大的話,Pub/Sub是延遲很大的,所以在部署的時候一定要注意哦。要更好的使用這個隊列,強烈建議安裝phpredis的pecl擴展。
Pub/Sub 服務的邏輯很簡單。用命令行起一個PHP,訂閱到一個Channel,這個PHP就一直等著。Web程序只要用Redis把數據Pub到同一個Channel里邊,命令行的PHP就會獲得數據并觸發callback函數。

訂閱者:

ini_set("default_socket_timeout", -1);

$redis = new Redis();
$redis->connect("127.0.0.1",6379);
$channelname = c("mail_channel"); 
try
{
    $redis->subscribe(array($channelname), "mailsend");
}catch(Exception $e)
{
echo $e->getMessage();
}

順便說下default_socket_timeout,如果你要用PHP長期連接socket,一定要設置這個值,不然會斷的。上邊的代碼會讓這個PHP一直保持運行狀態,不會結束,這就是為什么我推薦pecl擴展的原因,不用寫while,它自己會處理,有數據的時候,會回調 mailsend函數。

function mailsend($instance, $channelName, $message) 

mailsend函數能獲取以上參數,其中$message最重要。一般把數組序列化后,通過publish傳遞過來。

發布者:

$redis = new Redis();
$redis->connect("127.0.0.1",6379);

$info = array();
$info["to"] = $to;
$info["subject"] = $subject;
$info["content"] = $content;

if($ret = $redis->publish( c("mail_channel") , serialize($info) ))
{
return send_result( "send to " . $to . " add to queue" );
}
else 
    return send_error( $ret );

很簡單,用起來也非常方便。上邊說過,因為調用mail函數的用戶是www-data,所以真實的發信箱是www-data@yourserverdomain.com ,而你想顯示為 easy@yourserverdomain.com 。要保證一致性其實很簡單,用easy的用戶啟動訂閱者PHP即可。

su easy
nohup php sub.php & 
進一步適配反垃圾規則

為了防止別人冒用你的郵箱地址給公共郵箱發信,你可以啟用SPF和DKIM。
如果只是發信,SPF不用安裝什么的東西,直接在發信域名的DNS中加一條TXT記錄就可以了。格式大概是這樣:

v=spf1 ip4:106.3.32.60 ~all 

這句話告訴了收件服務器,這個域名下的郵箱如果不是106.3.32.60 發過來的,直接標記為垃圾。
DKIM相對復雜一些,它會對郵件內容進行簽名,然后收件服務器通過DNS獲取公鑰,核對簽名是否正確。

具體的操作是給Postfix添加一個內容filter。詳細說明參考這里:https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy

這些都做完以后,別人很難把自己發的垃圾郵件栽贓給你了。只要潔身自好,就可以順利的通過反垃圾規則。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21211.html

相關文章

  • 聊聊加密點事——PHP加密最佳實踐

    摘要:所謂對稱加密,就是加密和解密使用同一秘鑰,這也是這種加密算法最顯著的缺點之一。非對稱加密算法由于對稱加密在通信加密領域的缺陷,年和提出了非對稱加密的概念。非對稱加密,其主要缺點之一就是慢,適合加密少量數據。 1. 加密的目的 加密不同于密碼,加密是一個動作或者過程,其目的就是將一段明文信息(人類或機器可以直接讀懂的信息)變為一段看上去沒有任何意義的字符,必須通過事先約定的解密規則才能將...

    lcodecorex 評論0 收藏0
  • 聊聊加密點事——PHP加密最佳實踐

    摘要:所謂對稱加密,就是加密和解密使用同一秘鑰,這也是這種加密算法最顯著的缺點之一。非對稱加密算法由于對稱加密在通信加密領域的缺陷,年和提出了非對稱加密的概念。非對稱加密,其主要缺點之一就是慢,適合加密少量數據。 1. 加密的目的 加密不同于密碼,加密是一個動作或者過程,其目的就是將一段明文信息(人類或機器可以直接讀懂的信息)變為一段看上去沒有任何意義的字符,必須通過事先約定的解密規則才能將...

    Mr_zhang 評論0 收藏0
  • 移動端鍵盤和光標的兼容點事

    摘要:解決方法如果使用頁面數據不超過一屏禁止滾動,那么即使變成了頁面也不會有什么變化。 作者:@micky思 @wupq @yewq 在H5的開發中,個人的制作頁面布局習性不同,多多少少會產生在真機上input的光標和鍵盤的彈出會出現的各種BUG,文中整理了部分遇到的問題,歡迎新增 ios移動端輸入框上浮導致輸入位置偏移 問題原因:遮罩層定位為fixed,當鍵盤彈起時,ios11以及以下...

    XboxYan 評論0 收藏0
  • 移動端鍵盤和光標的兼容點事

    摘要:解決方法如果使用頁面數據不超過一屏禁止滾動,那么即使變成了頁面也不會有什么變化。 作者:@micky思 @wupq @yewq 在H5的開發中,個人的制作頁面布局習性不同,多多少少會產生在真機上input的光標和鍵盤的彈出會出現的各種BUG,文中整理了部分遇到的問題,歡迎新增 ios移動端輸入框上浮導致輸入位置偏移 問題原因:遮罩層定位為fixed,當鍵盤彈起時,ios11以及以下...

    Kerr1Gan 評論0 收藏0
  • 移動端鍵盤和光標的兼容點事

    摘要:解決方法如果使用頁面數據不超過一屏禁止滾動,那么即使變成了頁面也不會有什么變化。 作者:@micky思 @wupq @yewq 在H5的開發中,個人的制作頁面布局習性不同,多多少少會產生在真機上input的光標和鍵盤的彈出會出現的各種BUG,文中整理了部分遇到的問題,歡迎新增 ios移動端輸入框上浮導致輸入位置偏移 問題原因:遮罩層定位為fixed,當鍵盤彈起時,ios11以及以下...

    Jackwoo 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<