PHP – 解析 Email 原始檔案(文本)

可使用 EmailParser 套件來分析。我們透過 Composer 安裝,或是去 Github 下載

使用方式

 

繼續閱讀

php – Amazon S3 – 使用 SDK PHP 向 API 取得列表與內容

申請

需要用到  AWSAccessKeyIdAWSSecretKey,所以右上角點 個人 > My Security Credentials

點選 Continue to Security Credentials

選第三個,並按下 Create New Access Key。

建立的檔案儲存下來,因為 Amazon 不會記錄你的 Key 跟 Secret,日後需要但忘記的話,只能重新建立喔

下載SDK

官方參考。使用 Compoer 下指定

 

$result[‘Body’] 取得的檔案是原始格式,如果你想要將這筆 Amazon S3 的 Email 轉寄到你的 Email ,那可以透過 PHP 套件 EmailParser 來解析這份文件的寄件者、標題、寄件時間、內容、夾帶檔案……接著就能轉寄了喔。EmailParser 可以參考這篇

發送轉寄後,不再讓貯體 (Bucket) 中的物件 (Object) 保留。這是因為如果每次觸發 PHP EmailParse 那會重新讀取 Amazon S3 列表,這樣之前轉寄過的又會再轉寄一次。如果要備份原始文件,其實可以存到你的資料庫。

本來有想過轉寄過的物件,改名,再讓 PHP 判斷。但發現 API 似乎沒提供修改物件檔名的方法,只好作罷囉。

 

繼續閱讀

 

 

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  一樣沒問題~~