免費的 Mailchimp 替代方案:使用 Listmonk 和 AWS Lightsail 自架電子報服務
像是 Mailchimp 這樣熱門的電子報服務現在對發送電子郵件收取高昂的費用,人們也理所當然地開始尋找免費的替代方案。我發現 Listmonk 是目前最好的免費電子報服務。
Listmonk 是一個免費、開源且自架的電子報和郵件列表管理器。
基本上,它是一個免費軟體,您可以使用它來管理和發布您的電子報,並向您的用戶發送交易電子郵件。它有效、美觀且功能強大。
Listmonk 主儀表板
您可以在此試用 Listmonk 的線上演示。
Listmonk 是 Mailchimp 的理想免費替代方案 – 但它是自架的,這表示您需要自己的伺服器,並且需要遵循一些技術步驟才能使其啟動並運行。但是一旦您這樣做了,無論您的電子報規模多大,您都可以以低廉的價格或免費運行您的電子郵件行銷。您只需使用 Postmark 或 AWS SES 等郵件服務支付發送電子郵件的成本(大約每 10,000 封電子郵件 1 美元)。
(注意:我與 Listmonk 没有任何關係。這篇文章不是付費廣告。我只是在尋找免費的電子報服務時發現了 Listmonk,並愛上了它。我發現很難讓所有東西都啟動並運行,這就是為什麼我製作了本教學,以便下次我必須設定 Listmonk 執行個體時可以記住如何操作,它也可能幫助到與我處境相同的人)
讓我們設定一個功能齊全、可投入生產環境的 Listmonk 執行個體:
-
取得伺服器
任何運行 Ubuntu Server 的 VPS 都可以。我建議使用 Hetzner 或 Digital Ocean。最便宜、最基本的執行個體即可。您可以在低至 500MB RAM、1vCPU 的伺服器上運行它。
另一個熱門選項是 AWS Lightsail。AWS Lightsail 提供價格低至每月 3.5 美元的廉價伺服器(執行個體)。它們的據點比 Hetzner 或 Digital Ocean 多一些,而且帳戶建立過程稍微更快、更簡單,所以我們將使用它 – 但同樣,任何運行 Ubuntu Server 22.04 LTS 的伺服器都可以。
首先,前往 AWS Lightsail。點擊“建立執行個體”並選擇 Linux/Unix 機器。選擇“僅限作業系統 (OS)”。選擇 Ubuntu 22.04 LTS。
選擇一個方案(每月 3.5 美元或 5 美元的方案應該足夠),然後點擊“建立執行個體”。
請務必檢查您的執行個體詳細資訊,確保它在您想要的區域/位置運行(經驗法則:將您的伺服器盡可能靠近大多數用戶所在的位置),並確保它使用正確的 SSH 金鑰對,以便您可以登錄機器。
-
將公用靜態 IP 位址附加到您的執行個體
根據預設,您的 AWS Lightsail 執行個體附帶一個動態 IP 位址。這表示每次重新啟動伺服器時,它都會選擇一個新的 IP 位址。這並不理想,因為如果您想連接到您的執行個體,您將始終需要輸入不同的 IP 位址。
點擊您的新執行個體,您將進入執行個體管理頁面。導航到“網路”選項卡,並在其公用 IP 位址框下點擊“附加靜態 IP”。按照步驟附加靜態 IP。最後,您將看到您的執行個體的 IP 位址是如何固定到新的靜態 IP 位址的。現在,無論您重新啟動伺服器多少次,此 IP 都將保持不變。
-
允許 HTTPS 流量到您的執行個體
我們將安裝 SSL 證書,並通過 HTTPS 訪問我們的 Listmonk 安裝。為此,我們需要在我們的 Lightsail 執行個體上添加一個防火牆規則,以便它接受 HTTPS 流量。
前往您執行個體的“網路”選項卡,在“IPv4 防火牆”下,點擊“添加規則”。在“應用程式”欄位中,選擇“HTTPS”並點擊“建立”。該執行個體現在將允許 HTTPS 流量。
-
通過 ssh 連接到您的執行個體
讓我們通過
ssh
登錄到您的執行個體,以便我們可以開始進行操作。Ubuntu Server 執行個體的預設用戶是
ubuntu
,所以讓我們以該用戶身份登錄:ssh ubuntu@your-static-public-ip
請務必將
your-static-public-ip
替換為您剛剛建立的 IP,並確保您使用的是與啟動執行個體時相同的 SSH 金鑰對 – 您應該已經登錄了!
-
設定伺服器以在生產環境中運行 Docker 容器
用這個 shell 腳本,它可以將全新的 Ubuntu Server 映像轉換為可投入生產環境的機器,以安全地運行 Docker 容器。它加強了機器的安全性,並遵循最佳實務,以便在生產環境中使用真實的網際網路流量運行容器。
注意:您不應該隨便運行您不認識的人(像我)在網際網路上發布的隨機腳本:最好的做法是始終檢查它們 (這裡) – 一個技巧是讓 ChatGPT 或 Claude 等大型語言模型 (LLM) 運行它們,以便快速檢查它們是否可以安全運行,如果您不確定它們的作用。
要運行它,只需運行以下命令:
wget https://gist.githubusercontent.com/rameerez/f92ada0c83c2ecf9654cbadbc6adbbca/raw/21e74ad93740df363f344a3c40ca54a59a9b5168/docker-host-production-setup-ubuntu-server.sh
chmod +x ./docker-host-production-setup-ubuntu-server.sh
sudo ./docker-host-production-setup-ubuntu-server.sh
運行後,它應該會顯示一條成功訊息:
-
配置您的 DNS 以將您的網域連結到您的執行個體,以便我們可以安裝 Listmonk
我們的執行個體現在僅由一個 IP 表示。當然,我們可以使用 IP 單獨連接到 Listmonk,但由於我們正在為生產環境配置它,並且我們將添加 SSL 證書以確保一切安全 – 我們需要將我們的執行個體連結到網域名稱或子網域。
前往您的 DNS 伺服器設定(我使用的是 Cloudflare),並使用 A 記錄將子網域(通常類似
newsletter.example.com
)指向您的執行個體的 IP 位址。確切的步驟將取決於您使用的 DNS 服務(Cloudflare、Namecheap、Name.com 等),但它看起來會像這樣。儲存並退出
-
安裝 Listmonk
另一個 方便的腳本,可以使用 Docker 將 Listmonk 安裝 到我們新配置的 Ubuntu Server 執行個體上。只需運行它:
wget https://gist.githubusercontent.com/rameerez/6bf916df597f0e663fbb21816c8a1b90/raw/93180f406218c902583c6b4b97dd0942c84b6dcf/listmonk-setup.sh
chmod +x ./listmonk-setup.sh
sudo ./listmonk-setup.sh
它會詢問您要在哪個網域上安裝 Listmonk。這是我們在上一步中配置的網域或子網域,讓我們假設它是
newsletter.mydomain.com
當腳本要求您輸入網域時,請輸入您的網域,然後按 Enter 鍵。然後,腳本將開始在機器上安裝 Listmonk。
按照您在螢幕上看到的步驟操作,Listmonk 應該會被安裝:
-
訪問 Listmonk 網頁界面
打開您常用的網頁瀏覽器,並前往您的網域
newsletter.mydomain.com
您應該會看到 Listmonk 登錄螢幕。如果您點擊“登錄”,將會彈出一個視窗要求您輸入憑據。
您的 Listmonk 憑據顯示在運行 Listmonk 安裝腳本後的最後幾條訊息中(請參閱上一步),但如果您錯過了它,您始終可以在
/opt/listmonk/config.toml
下的config.toml
檔案中找到並更改它。輸入您的憑據,您應該就可以登錄到 Listmonk 管理儀表板了。
-
配置 Listmonk 基礎知識
登錄 Listmonk,導航到“設定”面板並設定電子報的一般資訊。
特別是,請務必將根 URL 設定為
https://`newsletter.mydomain.com`
,否則您的連結和所有電子郵件追蹤都將會損壞(請務必包含https://
)請務必更改預設的“發件人”電子郵件,並將其設定為您打算發送郵件的網域下的位址。
既然您已經在這裡了,還可以通過提供電子報名稱和標誌來設定電子報的公開外觀,您的用戶將在註冊表單、存檔和取消訂閱頁面等公開頁面上看到這些內容。
-
建立 SMTP 憑據以使用 AWS SES 發送電子郵件
Amazon Simple Email Service (SES) 是一項 Amazon AWS 服務,允許您使用 Amazon AWS 的電子郵件伺服器發送電子郵件。這一點很重要,因為 電子郵件伺服器需要良好的信譽才能夠真正傳遞電子郵件,而使用您自己的伺服器作為您的電子郵件伺服器可能行不通。
您也可以使用 Mailgun、Mailjet、Sendgrid 或 Postmark 來發送電子郵件,但由於我們已經在使用 Amazon 的 Lightsail,我們將只使用 SES。
它相當便宜:您發送的每 10,000 封電子郵件將支付 1 美元(100,000 封電子郵件 10 美元;100 萬封電子郵件 100 美元,依此類推)。
前往 AWS SES,選擇您要發送電子郵件的區域,並按照步驟建立身份。已驗證的身份是您用於通過 Amazon SES 發送電子郵件的網域、子網域或電子郵件位址。身份類型將是“網域”,在我們的範例中,這將是
mail.example.com
。在“進階 DKIM 設定”中,選擇“簡易 DKIM”並按照步驟設定正確的 DNS 記錄。這可能有點麻煩,但它非常簡單。
在 AWS SES 中設定好您的網域後,前往 AWS SES 左側面板,找到“SMTP 設定”,然後點擊“建立 SMTP 憑據”按鈕。
-
配置 Listmonk 以通過 AWS SES 發送電子郵件
現在,回到 Listmonk,前往“設定”中的“SMTP”選項卡以配置 AWS SES。
如下圖所示,點擊“Amazon SES”,以便預先填寫必要的欄位。
使用您的 AWS SES 區域修改“主機”(我的是
us-east-1
,您可以在您的 AWS url 中看到它,例如:https://**us-east-1.**console.aws.amazon.com
)並從 AWS SES 憑據頁面貼上用戶名和密碼。
請務必使用端口
2465
作為 SMTP。SMTP 的預設端口是 465,但 一些伺服器供應商(如 Hetzner)在其整個網路上封鎖了端口 465,以防止電子郵件垃圾郵件和電子郵件濫用;而 AWS SES 接受端口 2465 上的 SMTP,所以我們就使用它吧。點擊“測試連線”,一切都應該正常工作!
-
提高您的 AWS SES 發送配額
如果您在生產環境中使用它(也就是說,您將實際發送數百或數千封電子郵件),您可能需要要求 AWS 提高您的 SES 發送配額。
根據預設,您每天只能在 SES 上發送 200 封電子郵件。在 AWS 審查您的案例並授權您發送更多電子郵件後,可以免費提高此配額(他們這樣做是為了防止垃圾郵件)。
您需要 按照這些步驟 使用他們的服務配額控制台打開一個案例並說明您的請求。他們會要求您提供一些關於您的電子郵件內容和性質的詳細資訊,以及您是如何收集地址和用戶同意接收訊息的。
-
[選用] 配置 Listmonk 將附件儲存在 AWS S3 中
附件可以儲存在您運行 Listmonk 的同一台伺服器上,但我們可以做得更好。讓我們將它們儲存在 AWS S3 上,以獲得更好的可用性、複製能力,並避免 Listmonk 伺服器過載。
Amazon Simple Storage Service (S3) 是一項 AWS 服務,允許您儲存檔案。它有點像 Dropbox:您有“資料夾”(儲存貯體),您將檔案上傳到它們,它們將儲存在 AWS 雲中,以便您可以從任何地方訪問它們。其中一些儲存貯體可以是公開的,因此世界上任何人都可以訪問您上傳的檔案(非常適合儲存電子報附件中的圖片等內容)。
前往 AWS S3 並建立一個新的儲存貯體。將“已啟用 ACL”設定為“儲存貯體擁有者優先”,並取消勾選“封鎖所有公開存取”核取方塊。
現在,我們需要一個不同的 AWS 用戶,以便 Listmonk 應用程式訪問我們的 S3 儲存貯體。我們只會通過訪問金鑰授予此新用戶程式設計訪問權限,並且我們將建立一個嚴格的策略,以便它只能訪問我們剛剛建立的 S3 儲存貯體。
前往 AWS IAM,並建立一個新用戶。將其命名為
listmonk-s3
之類的名稱。不要“向用戶提供對 AWS 管理控制台的訪問權限”。在權限中,點擊“直接附加策略”,然後點擊“建立策略”按鈕。您可以 複製並貼上我剛剛為此目的建立的 JSON 策略,而不是使用視覺化編輯器。請務必編輯它,並將
listmonk-bucket
替換為您給 S3 儲存貯體的確切名稱。建立策略,將其附加到您的新用戶,完成用戶的建立,並在 IAM 中打開他們的用戶頁面。導航到他們的“安全憑據”選項卡,向下滾動到“訪問金鑰”所在的位置,並為用戶建立一個新的訪問金鑰。選擇“在 AWS 外部運行的應用程式”,然後點擊“下一步”,直到您可以建立並獲得您的訪問金鑰。
獲得
訪問金鑰 ID
和秘密訪問金鑰
後,不要關閉視窗 – 在新視窗中打開 Listmonk 設定,並導航到“媒體上傳”選項卡。如下圖所示填寫資訊,請務必編輯您自己的區域和您自己的儲存貯體名稱。 -
發送測試電子郵件活動
通過建立一個包含圖片的測試活動並將其發送給您自己,確保一切正常。如果您已正確按照步驟操作,您的收件箱中應該會收到一封來自您電子報的新測試電子郵件!
-
[選用] 配置退信和將不良電子郵件列入黑名單
如果您不想讓您的郵件發送帳戶被封鎖,處理退信和投訴至關重要。AWS SES 等服務非常重視退信和投訴,並要求您將投訴率保持在一定閾值以下,否則他們將阻止您發送電子郵件。
當您將電子郵件發送到不接受任何電子郵件的地址(例如虛假地址、拼寫錯誤的地址或已封鎖收件電子郵件的地址)時,您會收到退信。當用戶將您的電子郵件舉報為垃圾郵件時,您會收到投訴。
如果您對此沒有做出反應,並繼續向退信或投訴您的電子郵件的地址發送電子郵件,那麼您退信和投訴的電子郵件佔發送電子郵件總數的百分比將會不斷上升,您的帳戶將會被封鎖。
對退信和投訴做出反應的最佳方法是將衝突的電子郵件地址添加到黑名單中,這樣您以後就不會再向它們發送任何電子郵件了。
這是 Listmonk 附帶的一項功能,但它需要我們在 Amazon AWS 中正確設定它,以便 AWS SES 知道在發生退信或投訴時如何通知我們的 Listmonk 執行個體。
我們要做的第一件事是前往 Listmonk 設定的“退信”選項卡,並打開“啟用退信處理”、“啟用退信 Webhook”和“啟用 SES”。點擊“儲存”。
然後,我們需要執行一些麻煩但簡單的步驟來將 AWS SES 連結到 Listmonk。官方的 Listmonk 文件詳細說明了 如何操作,請立即按照他們的步驟操作。簡而言之:您需要建立一個 SNS“標準”主題,為該主題建立一個 HTTPS 訂閱,其端點為
https://newsletter.mydomain.com/webhooks/service/ses
,並將該訂閱添加到 SES 的“意見回饋通知”下,包括“退信意見回饋”和“投訴意見回饋”。如果您設定正確,退信和投訴地址將會被添加到黑名單中,並從您的郵件列表中取消訂閱。
測試它的一種方法是手動將
bounce@simulator.amazonses.com
和complaint@simulator.amazonses.com
添加到您的郵件列表中,並向它們發送測試電子郵件活動(或活動預覽測試)。如果一切正常,您將在 Listmonk 的訂閱者 > 退信
下看到退信,並且您將在訂閱者 > 所有訂閱者
下的訂閱者列表中看到有問題的電子郵件被自動添加到黑名單中。
就這樣!
您現在可以使用 Listmonk 作為 Mailchimp 的替代品,來管理您的電子郵件行銷活動,並以低廉的價格向數千個地址發送電子郵件。
此設定的總成本約為伺服器每月 5 美元,以及發送的每 10,000 封電子郵件 1 美元,這表示如果您發送的電子郵件不多,您可以每月花不到一杯咖啡的價格運行整個系統。例如,這使得 AWS 上的 Listmonk 成為非營利組織或任何其他預算緊張的專案的絕佳 Mailchimp 替代方案。您可以發送交易電子郵件、行銷電子郵件、建立和發展電子報 – 甚至可以發送簡訊、Whatsapp 訊息等等!
如果您已成功啟動並運行,請在評論中告訴我!很高興聽到本教學對其他人有所幫助,您的意見回饋將使本指南更加完善!