成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

郵件發(fā)送那點(diǎn)事

acrazing / 3230人閱讀

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

搭建Postfix

操作系統(tǒng)我個(gè)人比較喜歡CentOs,原生的系統(tǒng)都裝有,沒有的話 可以自己谷歌,這個(gè)很簡單 ,跳過。需要注意的是,Postfix默認(rèn)只對本地IP的Client開放,因?yàn)槲覀兪怯肞HP調(diào)用Postfix發(fā)送,所以沒有修改。

配置PHP

在php.ini中,修改sendmail_path 為 /usr/sbin/sendmail -t -i , 這樣PHP的Mail函數(shù)就可以發(fā)出正常的郵件了。
用Mail函數(shù)直接發(fā)送會(huì)有些小麻煩,除了編碼,它會(huì)把from寫成 [email protected] 。沒找到哪兒改,所以我就直接用PHPMailer發(fā)送了。

$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中發(fā)送的時(shí)候是可以隨意指定from的,不過別開心,from和實(shí)際發(fā)信用戶不同時(shí),郵件在很多系統(tǒng)都會(huì)被標(biāo)記成垃圾郵件的。同時(shí),郵件發(fā)送是一個(gè)耗時(shí)操作,不應(yīng)該讓web進(jìn)程長時(shí)間等待。否則,稍微有點(diǎn)并發(fā)服務(wù)器就要掛了。怎么辦?那就做個(gè)實(shí)時(shí)隊(duì)列唄。

Redis隊(duì)列

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

訂閱者:

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,一定要設(shè)置這個(gè)值,不然會(huì)斷的。上邊的代碼會(huì)讓這個(gè)PHP一直保持運(yùn)行狀態(tài),不會(huì)結(jié)束,這就是為什么我推薦pecl擴(kuò)展的原因,不用寫while,它自己會(huì)處理,有數(shù)據(jù)的時(shí)候,會(huì)回調(diào) mailsend函數(shù)。

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

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

發(fā)布者:

$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 );

很簡單,用起來也非常方便。上邊說過,因?yàn)檎{(diào)用mail函數(shù)的用戶是www-data,所以真實(shí)的發(fā)信箱是[email protected] ,而你想顯示為 [email protected] 。要保證一致性其實(shí)很簡單,用easy的用戶啟動(dòng)訂閱者PHP即可。

su easy
nohup php sub.php & 
進(jìn)一步適配反垃圾規(guī)則

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

v=spf1 ip4:106.3.32.60 ~all 

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

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

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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/21211.html

相關(guān)文章

  • 聊聊加密點(diǎn)事——PHP加密最佳實(shí)踐

    摘要:所謂對稱加密,就是加密和解密使用同一秘鑰,這也是這種加密算法最顯著的缺點(diǎn)之一。非對稱加密算法由于對稱加密在通信加密領(lǐng)域的缺陷,年和提出了非對稱加密的概念。非對稱加密,其主要缺點(diǎn)之一就是慢,適合加密少量數(shù)據(jù)。 1. 加密的目的 加密不同于密碼,加密是一個(gè)動(dòng)作或者過程,其目的就是將一段明文信息(人類或機(jī)器可以直接讀懂的信息)變?yōu)橐欢慰瓷先]有任何意義的字符,必須通過事先約定的解密規(guī)則才能將...

    lcodecorex 評論0 收藏0
  • 聊聊加密點(diǎn)事——PHP加密最佳實(shí)踐

    摘要:所謂對稱加密,就是加密和解密使用同一秘鑰,這也是這種加密算法最顯著的缺點(diǎn)之一。非對稱加密算法由于對稱加密在通信加密領(lǐng)域的缺陷,年和提出了非對稱加密的概念。非對稱加密,其主要缺點(diǎn)之一就是慢,適合加密少量數(shù)據(jù)。 1. 加密的目的 加密不同于密碼,加密是一個(gè)動(dòng)作或者過程,其目的就是將一段明文信息(人類或機(jī)器可以直接讀懂的信息)變?yōu)橐欢慰瓷先]有任何意義的字符,必須通過事先約定的解密規(guī)則才能將...

    Mr_zhang 評論0 收藏0
  • 移動(dòng)端鍵盤和光標(biāo)的兼容點(diǎn)事

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

    XboxYan 評論0 收藏0
  • 移動(dòng)端鍵盤和光標(biāo)的兼容點(diǎn)事

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

    Kerr1Gan 評論0 收藏0
  • 移動(dòng)端鍵盤和光標(biāo)的兼容點(diǎn)事

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

    Jackwoo 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<