2023-06-02

[PHP 5.x]PHPMailer升級TLS1.2

這幾天為了替公司省錢,捨身跳進PHP的坑裡幫廠商救火XD 這個案子是用PHP 5.6、YiiMailer 1.6(include PHPMailer 5.2.8)開發,環境為AWS UBUNTU、Nginx,用途是讓指定品牌透過網站問券方式預約免費膚質檢測服務。這次發生的問題是當用戶填完問券,按下確認時系統卻無法發信,並回傳錯誤訊息:SMTP connect() failed.

最直覺當然是直接先把問題丟給ChatGPT,我也按照他的建議逐一排查,雖然沒有直接解決我的問題,但也讓我更認識我們家的Server環境。由於不只一個活動網站架在這個Server上,甚至不同品牌合作的廠商所使用的PHP版本也不一致。為了避免讓同事等待太久又不一定能解決(幫自己留後路XD),所以我首先請同事直接請原廠商為專案升級PHP版本報價。

在他去請廠商報價的同時,我用了以下方法排查:

一、Telnet (正常)

telnet smtp.office365.com 587
顯示正常:
220 SI1PR02CA0000.outlook.office365.com Microsoft ESMTP MAIL Service ready at Mon, 29 May 2023 05:09:46 +0000

2023-04-07

[EPPlus]以EPPlus開發Microsoft Excel 365公式時無法正常開啟

近期開發Excel報表供用戶管理配貨數量,使用到許多Excel 365的新函數,如:FILTERLAMBDA、XLOOKUP等等,尤其是前兩者的搭配使用,讓我把公式(formula)進行完美瘦身、可讀性提升了不少~

因為要將資料庫匯出成Excel給用戶使用,考量效能和無須授權等優點所以我選擇使用EPPlus 4.5.3來為用戶產生Excel報表。

搭配ChatGPT開發都還算順暢,除了一些版本差異和特殊功能需要試錯,如:群組(大綱,OutlineLevel)、條件式格式設定(ConditionalFormatting)、資料驗證(DataValidations)。但當我編譯都沒問題,拿到.xlsx檔時,Excel竟然回覆我公式有錯誤:我們發現 XXX.xlsx 的部分內容有問題。您要我們盡可能嘗試復原嗎? 如果您信任此活頁簿的來源,請按一下 [是]。

2022-08-11

Azure AD SSO in ASP.NET (使用OWIN)

大多公司是採用微軟企業方案,可以由Azure Portal管理Office、Outlook、群組(Group)等權限和功能。維護舊專案(.NET Framework 4.7.2)時,想加上SSO(Single sign-on)在網頁上,可是網路上大多是寫給.NET Core的教學,雖然官方也有提供.NET Framework的教學,但新增專案時選擇Azure驗證可以得到比較漂亮的寫法,故特此筆記。

一、新增OWIN中介軟體Nuget套件

Install-Package Microsoft.Owin.Security.OpenIdConnect
Install-Package Microsoft.Owin.Security.Cookies
Install-Package Microsoft.Owin.Host.SystemWeb

二、新增Startup.cs

與ASP.NET Core類似,在Startup.cs設定中介軟體的操作,在專案新增「OWIN啟動類別」,命名為"Startup.cs"。

2022-05-24

[PowerShell]解決PowerShell Invoke-RestMethod呼叫API亂碼問題

如題,但今天說明放後面,程式碼放前面:

function JsonEncoding{
    Param (
    [string]$json
    )
    # $utf8 = [System.Text.Encoding]::GetEncoding(65001)
    $iso88591 = [System.Text.Encoding]::GetEncoding(28591)
    $wrong_bytes = $iso88591.GetBytes($json)
    $right_string = [System.Text.Encoding]::UTF8.GetString($wrong_bytes)
    $right_string
}

老實說處理PowerShell亂碼的文章真多,並且Bruce也早早寫有一勞永逸的作法,讓cmd、PowerShell等等都能自動套用UTF-8編碼:https://blog.kkbruce.net/2021/10/solved-console-garbled-code-for-win10-win11.html?m=1&fbclid=IwAR21Umo0_S8I35y1i2xSsOAIUzDJnRfeqf_G2vEjYdd4ks1aZRnnj3kYoUI

黑大也有直接匯出txt讓文字編輯器幫我們編碼的作法:https://blog.darkthread.net/blog/ps-encoding

會寫這篇文章是因為也是工作上情勢所逼,公司電腦或Production環境常常有限網域、限權限、、、限限限 什麼都限的時候,不可能在每一台VM都裝Postman或隨意依賴系統管理員做事情,好在跳版機和公司筆電都是Win環境,那就可以好好利用PowerShell裡面的library啦!