Amazon – SES 設定 Email,讓使用者寄信/伺服器收信/轉寄給管理者

流程

提供 Email 做測試

還未提交審核前,收發 Email 只有在認證過的 Email 或 Domain 可以通訊。所以首先我們先認證 Domain 跟一組 Email 做測試。

打開 Amazon SES (Amazon Simple Email Service)

Domain > Verify a New Domain 建立一個網域並驗證

輸入網域後,點選 Verify This Domain

接著要驗證新的 Domain,這兩筆資料,會顯示在你的 Route 53

接著會跳出警告訊息說,MX 紀錄 (MX Type) 會覆蓋你原本有的設定。假如你有特殊設定過的話,請不要覆蓋。但因為我們沒有,所以打勾後點選 Create Record Sets。

這時候在準備驗證 Domain,大概等個五分鐘左右

因為剛剛我們加入了 『TXT 紀錄』『MX 紀錄』所以,可以到 Route 53 看看我們裡面出現了這兩筆

回到 Amazon SES 後可以看到 Domain 已經驗證成功 (Verified)

發信

因為目前在沙盒模式中,只能寄信給驗證過的 Email,所以在這裡加入 Email

填入 Email

接著我們打開自己的 Email 驗證

未認證的時候會出現這樣

從信件中的認證網址連出去後,可以看到認證成功

列表狀態會變成 verifed

這時候我們可以發送測試信件,從 網域 寄送到剛剛認 證過的 Email,看看我們的網域能不能收到

From 的帳號名稱可以自訂,可以打 service 或 admin 之類,寫好後發送測試信件

再到我們自己的信箱中,就可以成功看到由 Amazon 寄來的信件了。

如果要使用 SMTP 給自己的程式語言發信的話,這邊有 Server 連接的名稱,第一次我們要點選左側的 SMTP Settings > Create My SMTP Credentials 來建立一個使用者。

Create 建立

這邊就能看到 SMTP 的 Username 與 Password ,把他儲存下來,因為 Password 日後忘記的話 Amazon 是無法找到的。

Amazon I Am 中就可以看到你目前有的使用者囉

 

收信

參考官方說明。在 SES 中設定收信規則

設定一個規則名稱

進入後點選 Create Rule

Recipient 保持空白,直接點選下一步

選擇 Amazon S3

選擇 Create S3 bucket。這是在 S3 建立一個收信夾的概念。這裡提供官方說明『如果您選擇在 Amazon S3 儲存貯體中存放訊息,訊息的大小上限 (包含標頭) 為 30 MB。如果您選擇透過 Amazon SNS 通知接收訊息,訊息的大小上限 (包含標頭) 為 150 KB。』參考官方

輸入自訂的貯體 Bucket 名稱後,點選 Create Bucket

選擇你貯體後,點選下一步

自訂名稱後,並注意勾選。點選下一步

檢查無誤後,建立規則

 

列表出現,狀態顯示 Enabled

前往 Amazon S3 可以看到已經建立貯體

點進去,會看到有預設的 AMAZON_SES_SETUP_NOTIFICATION,可以忽略。如果我們認證的網域收到信,都會在這邊顯示檔案 (Email 原始資料)

試著發一封 Email 到我們的網域

在 Amazon S3 的 Bucket 中就可以看到這封字串的檔案名稱,下載下來後打開,就能看到 Email 的原始碼。

基本上到這邊,發信最簡單,收信就比較麻煩。目前收信看到的是原始格式,如果要進一步解析可參考這篇 使用 SDK PHP 取得列表與內容

轉寄

要怎麼將 Email 原始檔轉寄給其他管理人 (例如 Jason@gmail.com) 呢?那就透過  S3 的 API + EmailParser 來製作。下面這個完整範例,依序:

  1. API 取得 Bucket
  2. API 取得 Object
  3. 用 EmailParse 分析
  4. 用 PHPMailer 發送
  5. API 刪除已經發送過的 Object

為了方便說明流程,所以不使用 Class 封裝,轉換為自己的程式碼的時候記得寫漂亮一點喔!

這裡要注意發信人的部分,務必要是已經認證過的 Domains 或 Email 才可以喔。

假設你的 Domain 是 abc.com 那麼發信人應該如 service@abc.com。因為是交由 Amazon 轉寄的動作,所以如果你的發信者填上了別的地址如 (jason@gmail.com),而這個使用者名稱又沒有在 SES 中的 Identity Management 認證過,那麼 SMTP 就會發送失敗,出現錯誤訊息喔!

定時收信

若在 Linux 的話,可以使用 apt-get install curl 安裝 curl 套件,透過 CURL 去訪問你的 PHP 定時觸發。 PHP 定時觸發,網路上很多教學囉,大致上簡略介紹如下

 

繼續閱讀

 

jQuery – 使用套件 file-preview.js 簡單顯示預覽圖

之前教過 2 種預覽圖都是原理,從發佈以來有很高的流量都在看這兩篇:

但覺得看這些文字連我都覺得有點囉嗦XD 剛好最近突然寫了幾個類似功能,於是順手做了一個 jQuery 套件,大家直接下載來放到自己的專案吧。

以後大概連我自己都不會再點進去上面兩篇了吧 XDD

前往 Github 下載

HTML 大概長這樣

這邊是用 <div> 取代 <img> 這樣圖片才能適應不同寬高,不至於變形。不懂得可以網路 Google 一下囉。

最快的方法就這麼寫

記得選擇器 $() 中間為空喔。但如果你需要在 on() 事件中更自訂化一點,我建議這麼寫

上面用 $(_this) 主要是因為一個頁面可能會有 1 個以上的 form 喔!如果直接 $(“.img”) 去尋找會彼此表單互相影響啦,所以養成以組件的根源為節點的好習慣 😀

上面的程式碼就是變成下面的結果 😀


從 success 中就可以取得預覽圖的網址、檔名、類型、大小……若有需要還可以取得 base64 的圖片編碼,可以直接使用 POST 送到遠端解碼 😀

前往 Github 看看

jQuery – 在 header 修改,解決跨網域 JSON、JSONP 的方法

通常使用 jQuery 要跨網域存取資料,會出現禁止訊息

通常我們會改用 JSONP,但是 JSONP 只允許使用 GET 方式處理。可以參考官方建議寫法,我這邊舉例 PHP 與 jQuery

PHP

 

jQuery

上面的 callback() 可以自動處理 json 與 jsonp 的回傳。注意上面這兩個例子的名稱要互相匹配:

  • php 的 $jsonp_callback_key
  • jQuery 的 jsonp

所以實際網址會變成類似這樣

 

非 GET 請求怎麼辦?

當 API 設計的要求是 POST、PUT、DELETE …… JSONP 不就沒辦法使用了?後來參考了網友發文發現可以這麼做

PHP

設定 header 為 Access-Control-Allow-Origin:* 或 Access-Control-Allow-Origin:允許的網域  就可以使用 JSON 而不使用 JSONP 啦!你也可以改成 header(‘Access-Control-Allow-Origin:http://localhost’); 那就只限制當發生跨網域行為時,只有從本機發出請求才允許。

jQuery

改用 json 以後發現可以成功唷!而且用 POST  一樣沒問題~~

Ubunto – 安裝 PHP7 + Apache + Mysql/MariaDB + phpMyadmin

切換到 root

第一次需要設定 root 密碼,接著進入 root

另外,若在桌面的話要使用 root 登入可以這麼做

在檔案中加入下面這行

存檔後重新開機,就可以選擇 Login 了。

建議替換倉儲

參考 比較能找到 php 相關較新的版本。

 

建議安裝 aptitude

可以使用

取得較 apt-get 方便的 aptitude,我主要用來查詢 php7 是否存在

因為要查詢套件,無法使用 apt-get 所以要借用 aptitude。如果遇到被鎖定問題,重新新開機 ubuntu 就可以了。或是參考解說

 

安裝 vim

 

更改主機時間

查詢時間

使用 ntpdate 修改為台灣時間,

若出現 the NTP socket is in use, exiting,代表不是系統時間校正的問題,所以設定時區為台北。

選擇 Asia – Taipei。

 

MaraiDB 安裝

 

登入後修改 MaraiDB 時區為台北(+8:00)

查看時間與時區

修改時區

參考

 

Apache 安裝

到瀏覽器打上 http://localhost 就可以看到 Apache 預設首頁代表安裝成功。接著啟用 mod_reswite 功能,讓伺服器可以讀取 .htaccess 。參考

這時在 phpinfo() 中可以看到 Configuration > apache2handler 的 Loaded Modules 有 mod_rewrite 就代表啟用成功。

找到 DocumentRoot “/var/www/html” 後,修改如

 

另外一種設定

預設網站 http://xxx.com 對應 /var/www/html ,但如果我希望預設 http://xxx.com 網站是讀取 /var/www/html/project 而不是讀取 /var/www/html 那就這麼設定

將 Directory “/var/www/html/” 搬移到外層,代表讓所有 html 底下的都啟用這個 AllowOverride 設定。這可以用在一個網域可能放多個路徑檔案時的指定。例如

  • http://xxx.com 讀取 /var/www/html/project/website
  • http://xxx.com/api 讀取 /var/www/html/project/api

 

若要設定 Alias

如果你希望網址 http://xxx.com/abc 可以連接到  /var/www/html/cdefg,那就添加

參考

若要多個網域指向同一台主機

A.com 指向路徑 /var/www/html/A,B.com 指向路徑 /var/www/html/B,可以這樣做

修改權限

如果使用非 root 無法上傳的話,可修改 /var/www/html 權限為非 root 的 使用者,如 ubuntu。這樣可以當使用帳號 ubuntu 透過 SFTP/FTP 連接的時候進行編輯。

若要透過 FTP 上傳,需要注意權限路徑的問題

 

PHP 安裝

建立第一份 php 測試查看 phpinfo()

網址打 http://localhost/info.php 就可以順利看到 PHP 相關設定資訊。接著安裝相關套件

如果要查詢更多,可以透過 aptitude 查詢可安裝的名稱。若安裝不同的版本號,只需要修改如 php7.x 即可。但確實的名稱建議還是用 search 查詢一下。

接著修改 php.ini

參考這篇修改php.ini

 

啟動SSL支援

 

phpMyadmin 安裝

MaraiDB 預設不讓root登入phpmyadmin,加入這行可解除

修改設定,將 apache 添加 phpmyadmin 設定

參考 在底部加入

修改後重新啟動

網址打上 http://localhost/phpmyadmin/ 就可以看到登入畫面

若要修改進入的網址,例如 http://localhost/PA/ ,那就修改

 

 

Sublimetext – 使用 SFTP 設定 Amazon AWS EC2

在左側專案欄 右鍵 > SFTP/STP > Map to Remote… 會自動產生一份新的 sftp-config.json 修改為以下設定

sftp_flags 可以是 pem 或是轉換為 ppk 都可以。