去年這時(shí)候,我們做了一個(gè)看起來(lái)很反直覺的決定:把訂單確認(rèn)郵件里的PDF發(fā)票附件,全部換成了直接嵌在正文里的PNG圖片。不保留PDF,不附加任何文件,就是一張圖。一年跑下來(lái),郵件的打開率上去了,垃圾郵件評(píng)分下來(lái)了,客戶甚至沒注意到變化——他們只是不再需要多點(diǎn)一下“查看附件”了。
這個(gè)變動(dòng)背后,有一個(gè)很現(xiàn)實(shí)的郵件投遞邏輯:PDF附件在規(guī)模面前,就是個(gè)大坑。
![]()
第一,體積大,吃配額。用dompdf這類庫(kù)生成的帶樣式發(fā)票,一張大概150KB。而同等內(nèi)容的PNG,只要40KB。對(duì)單封郵件來(lái)說(shuō)幾十KB不算什么,但一年發(fā)一百萬(wàn)封交易郵件,這個(gè)差距就吃掉了大量的發(fā)送額度。更重要的是,郵件服務(wù)商會(huì)根據(jù)你的平均郵件大小給你打分,分?jǐn)?shù)直接關(guān)聯(lián)收件箱到達(dá)率——體積大的發(fā)件人,進(jìn)垃圾箱的概率更高。
第二,移動(dòng)客戶端根本不把附件當(dāng)回事。安卓的Gmail會(huì)把PDF附件顯示成一個(gè)“1個(gè)附件”的按鈕,用戶需要點(diǎn)一下才能下載查看。iOS的郵件App把附件圖標(biāo)扔到郵件底部,默認(rèn)不展開。沒有哪個(gè)客戶端會(huì)把PDF內(nèi)容直接渲染出來(lái)。也就是說(shuō),客戶想看發(fā)票,得主動(dòng)操作一下,而絕大多數(shù)人根本懶得看。你精心生成的發(fā)票,最終只是角落里一個(gè)沒人碰的圖標(biāo)。
第三,大規(guī)模附件就是垃圾郵件的信號(hào)。營(yíng)銷郵件帶PDF附件會(huì)被反垃圾系統(tǒng)重點(diǎn)標(biāo)記,因?yàn)檎?jīng)交易郵件發(fā)件人早就放棄PDF附件了。你的郵件能不能進(jìn)收件箱還是被扔進(jìn)促銷標(biāo)簽,很大程度上取決于“有沒有附件”這個(gè)特征。把PDF換成內(nèi)聯(lián)圖片,等于主動(dòng)把信號(hào)切回了收件箱。
最開始我們想的是折中方案:先用PDF庫(kù)生成發(fā)票,再用Imagick把第一頁(yè)柵格化成PNG,然后嵌到郵件里。確實(shí)能跑通,但代價(jià)是管道里同時(shí)要維護(hù)PDF生成器和圖像柵格化器,一個(gè)喂給另一個(gè),代碼量翻倍,排版控制權(quán)反而被切割得七零八落。這是典型的“解決了問題,但留下了一套更臟的管道”。
最終拍板的方案是:直接跳過(guò)PDF,把發(fā)票模板渲染成PNG。模板用Blade寫,一個(gè)類型一個(gè)模板;渲染服務(wù)統(tǒng)一調(diào)度,支持發(fā)票、收據(jù)、代金券、產(chǎn)品卡片四種視口尺寸;渲染結(jié)果緩存到S3上,重復(fù)請(qǐng)求直接返回,不再重新渲染。管道干凈了,渲染速度更快,而且同一套機(jī)制后續(xù)輕松擴(kuò)展到了收據(jù)和代金券。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.