自從2011年9月7日Synology宣布他們的DSM 3.2支援CardDAV與CalDAV以來,許多Synology用戶都在論壇和IT界中表現出極大的興趣。然而,在Synology官方社群中搜尋“caldav”這個關鍵詞,可以找到長達80頁接近八年內的搜尋結果,從DSM 3.2到6.2,大多數人都在詢問如何才能成功同步。直到現在,真正能成功同步的只有CardDAV聯絡人。這可能是因為很少有人問到CardDAV同步的相關問題。
在2014年,小編撰寫了一篇如何與Synology CalDAV和CardDAV同步Outlook連絡人、行事曆和工作的文章。在過去幾年中,Synology一直負責地更新他們的DSM到目前的6.2版本。四年多過去了,讓我們再次看看Synology NAS提供的CalDAV和CardDAV服務是否仍然可行。此外,如果你是Baikal用戶,要確保Baikal伺服器是否可以在較新版本的DSM上運行。如果你目前的Baikal伺服器運行正常,則無需更新DSM版本。如果你想進行實驗,請確保你真正了解相關資料庫、php、apache等方面的細節。在四年多前的文章中,也提到了如何讓Outlook同步運行在Synology上的Baikal伺服器。如果還沒看過,不妨翻翻舊文,溫故知新。
過去曾經能用的同步工具
在
EVO Collaborator for Outlook從2014年開始支援與Synology同步聯絡人、行事曆、工作 之後,一些同類型的同步工具軟體也逐漸開始支援,例如:
gSyncit。在過去幾年的某個舊DSM版本的時候,這些同步工具軟體都可以正常同步。 就目前來說,最新版本的gSyncit已經
無法偵測伺服器URL,回傳一個
(404) Not Found的錯誤信息。
|
gSyncit 404 Not Found error |
關於Synology的這個問題,小編寫信給EVO團隊提問,得到的回覆是: "就在今年初,我們一個用戶來信提問Outlook無法與Synology的CardDAV伺服器同步行事曆與工作。對於此問題,我們也實驗出來一樣的結果。所以我們針對此問題找出解決辦法以確保用戶可以同步。就在幾天前,
這個問題已經解決。"
從Synology官方知識庫來的信息。。。
不知道在哪裡聽到這個說法? 如果一個軟體用戶提報一個問題,其實其背後有一千個用戶也同時會有一樣的問題。只是他們沒有提報罷了。 基於上述的說法以及在Synology官方社群論壇上面討論CalDAV無法同步的熱烈,實際上有
很多Synology用戶都在等一個解決方案。哈囉,群暉科技! 快點醒過來解決問題吧! 根據Synology官方知識庫的教學 “
如何將 Synology Calendar 與其他 CalDAV 用戶端同步?”,同步行事曆應該是很簡單的課題。同時,另外一篇”
如何使用 Synology NAS 架設行事曆伺服器”也提供設定CalDAV用戶端的步驟。如果你按照這些教學去實作,結果是不會成功的。
|
Synology WebDAV & Calendar App |
如果你查看
Synology DSM介面,你會看到有兩個地方可以
建立CalDAV分享URL。一個是在NAS內建的行事曆App:
|
Calendar App裡面的CalDAV Account設定 |
另外一個則是在WebDAV app:
|
WebDAV 新增行事曆 |
官方知識庫也有提到這兩個地方。就如上面所說的,實作是行不通的。 下面是官方知識庫對於內建行事曆App顯示Calendar URL的截圖:
|
內建行事曆產生的URL |
下面是官方知識庫對於WebDAV URL顯示Calendar URL的截圖:
|
WebDAV產生的URL |
我們發現的真相是。。。
理論上,就同一個CardDAV帳號來說,內建行事曆App跟WebDAV App裡面的行事曆應該要一樣,不應該是分開的。不論你在哪裡存取行事曆資料,應該看到一樣的東西。 對於上述狀況,也許舊版DSM是正常的。但是目前已經不可考究。就現在的DSM 6.2來說,經過實驗證明,兩個App的行事曆是分開獨立的。同時,在找出解決辦法之後,我們確定WebDAV App的行事曆經過一些修正之後才可以提供同步之用。
解決問題,繼續同步
我們花了很多時間找出官方知識庫跟實作上面步驟的差別,並對其URL、路徑、主機名稱,連接埠等等作差異比較之後,我們在數個CalDAV用戶端軟體上面已經同步成功。 我們先列出完全可用的CalDAV URL。然後我們再將其與知識庫提供的URL作比較。下面是完全可用的URL:
- 非SSL: http://<server_hostname_or_ip>:port/homes/<user_account>/<calendar_folder>/
- SSL: https://<server_hostname_or_ip>:port/homes/<user_account>/<calendar_folder>/
我們實驗裡面實際使用的URL:
- 非SSL: http://junkyard2019.ddns.net:5005/homes/junkadmin/calendar/
- SSL: https://junkyard2019.ddns.net:5006/homes/junkadmin/calendar/
在DSM 6.2內建行事曆App 實作產生的URL:
|
Synology內建行事曆URL路徑 |
我們先把主機名稱擺一邊,直接比對上圖與實際可用的URL路徑。經過瀏覽Synology NAS的樹狀路經後,完全找不到圖中的caldav目錄名稱。也就是說,圖中的URL路徑是完全不可用的。就算可以用,也只能在行事曆App裡面有效,無法做同步之後。
WebDAV App提供的URL路徑:
|
Synology WebDAV提供的URL路徑 |
|
官方知識庫示範的CalDAVURL路徑 |
現在,我們來比對完全可用的URL、DSM 6.2上面實作產生的URL、官方知識庫提供的WebDAV URL路徑。同樣地,把主機名稱擺一邊。DSM 6.2的版本完全正確。但是,除非把鼠標停留在Location底下,否則根本不會出來。一般使用者沒有注意到的話,應該只會專注在KB上面的教學。再來,兩個WebDAV版本差別在於資料夾路徑。官方知識庫的路徑是:
實作產生的路徑:
- /homes/<user_account>/<calendar_folder>
比較之後發現路徑上的差異是造成使用者們無法同步Synology CalDAV服務主要原因。同步工具軟體們按照原先舊的
/web/Calendar/<calendar_folder>自動偵測法則並無法偵測到新版的URL路徑。過去幾年中,舊版的路徑偵測都是可以用的,但是新版卻不可以,這只能說明群暉科技的官方知識庫的小編有點偷懶喔。
與Synology CardDAV服務同步
|
Synology DSM CardDAV 伺服器 |
在Synology NAS DSM上面CardDAV服務的設定很簡單。只有一個地方可以做連接埠的設定。
|
Synology CardDAV 設定介面 |
目前完全可用的CardDAV URL:
- 非SSL: http://<server_hostname_or_ip>:port/addressbooks/users/<user_account>/addressbook/
- SSL: https://<server_hostname_or_ip>:port/addressbooks/users/<user_account>/addressbook/
如果逐字比較,我們可以發現上面的URL格式跟先前2014年提供的EVO Collaborator for Outlook所用的格式一模一樣。在官方知識庫裡,只有兩頁提到如何做DSM裡面相關參數的設定。完全沒有針對iOS、macOS、Thunderbird、Outlook等等用戶端相關軟體的設定教學。這是蠻可惜的。
與Synology CardDAV伺服器同步的一些問題
狀況 #1
這是一個蠻有意思的狀況。大部分郵件軟體包含Thunderbird、Outlook、iOS Mail等等 ,裡面聯絡人的地址區塊把街道名、城市、區域、國家、郵遞區號等等儲存在各自的項目中,如下圖:
|
Outlook聯絡人地址項目 |
但是,當聯絡人資料同步至Synology NAS以後,全部的項目都會被併至街道名項目裡面,如下圖:
|
Synology地址合併為一行 |
當同步工具偵測上述的合併動作之後,會把這些變更同步回本地端的聯絡人。看官們可能會馬上瘋掉。為了避免悲劇的發生,絕對不要在Synology上面做任何修改動作。
|
同步過後Outlook地址變成一行 |
狀況 #2
如果使用同步工具的郵件軟體是Outlook,在聯絡人的電話分類清單中,不要使用主要(Primary)類別來儲存電話號碼。
|
Outlook 電話 Primary |
在另外一端的Synology NAS上面,不要使用
Telephone跟
Preferred兩種類別來儲存號碼。

在我們的實驗中,會發生下列諸多的問題: 1. 當
Primary類別電話號碼被同步到Synology NAS以後,一開始會被分類到
Telephone。如果在NAS上面修改這筆電話,後續的同步結束以後,該筆在Outlook上面的Primary類別電話號碼會消失。 2. 建立在Synology NAS上面Telephone類別電話號碼不會被同步到Outlook上面。 3.
Preferred類別電話號碼是會被同步到Outlook上面,並且會以Primary類別存在。但是,該筆Primary類別電話號碼又會被同步回Synology上面並以Telephone類別項目的形式存在。這時候,#1的狀況又會再次發生並造成Primary電話號碼的消失。 4. 當Synology上面Telephone跟Preferred類別電話號碼都存在的狀況下,Preferred電話號碼照道理來說會跟Outlook上面的Primary電話號碼同步並一致。但是,實際狀況則是Preferred電話號碼會不見,Primary電話號碼又會被存入Telephone分類的電話號碼中。再來,又會回到#1的狀況。 上述的實驗最後會變成一種
不會結束的迴圈。因此,為避免造成不必要的資料流失,不要使用這三個電話類別以及其他籠統名目的電話類別。
在不同軟體/平台上面與Synology CalDAV跟CardDAV同步
讓我們來看看是否同步工具軟體/插件是否能勝任在不同平台上面做同步的工作
Outlook與Synology CalDAV跟CardDAV同步
EVO Collaborator for Outlook可以經過一次設定就輕鬆做到同步CalDAV行事曆、工作 跟CardDAV聯絡人的課題。相容的平台是
Outlook 2007、
2010、
2013、
2016、
2019跟
Office 365。下面是設定的步驟:
- 打開Outlook。
- 點擊Configure Profile(s)。
|
Configure Profile(s) |
- 典籍左下角的Profile #21。
|
點擊Profile #21 |
- 在上方依照先前提供的格式輸入Synology NAS的主機名稱。
|
輸入伺服器主機名URL |
- 透過非SSL同步: https:/<server_hostname_or_ip>:8008
- 透過SSL同步: https://<server_hostname_or_ip>:8443
- 輸入帳號及密碼。
|
輸入帳號及密碼 |
- 點擊下方的TEST之後,聯絡人、行事曆、工作的伺服器URL就會自動偵測並在URL空白欄為自動填入。

|
點擊TEST按鈕 |
- 又,若是Synology上面有多個行事曆(日曆)或工作,點擊上一個步驟中URL右手邊的資料夾圖案即可從跳出來的視窗中選擇。
|
多行事曆清單 |
- 點擊下方的Apply儲存設定。

注意事項:
- 為了讓自動偵測能夠正常運作,所有非SSL或SSL使用的連接埠必須使用Synology提供的預設值:
- CardDAV: 非SSL: 8008 / SSL: 8443
- CalDAV: 非SSL: 5005 / SSL: 5006
- 同時,在輸入主機名稱的時候,最後面的連接埠一定要輸入。非SSL需要輸入”:8008”。SSL需要輸入”:8443”。


- 若是因為某些考量,CalDAV跟CardDAV的連接埠必須使用非預設值的連接埠號碼,則需要手動輸入URL。此時,將Server Hostname空間保留空白然後按照先前講到的URL規則在伺服器URL區塊來手動輸入URL。完成之後,同樣點擊TEST做測試,然後點擊Apply儲存設定。

macOS與Synology CalDAV跟CardDAV同步
一直以來,很多人macOS在建立CardDAV跟CalDAV帳戶的時候遇到”
Unable to verify account name or password.”的問題。因為無法設定CalDAV帳戶,所以連同步都談不上。我google這個信息,找到很多答案,應該是跟
伺服器憑證有關。 小編針對這個問題做了一個實驗供看官做參考。在這個實驗的下面三種狀況裡面,我嘗試在Mojve上面建立CardDAV跟CalDAV帳號:
- Synology上面有預設Synology自己簽署(Self-signed)的憑證。
- 在Synology上面匯入第三方自己簽署的憑證。
- 在Synology上面匯入CA簽署的憑證。
在第一個跟第二個狀況裡面嘗試建立帳戶的時候,不論是透過
手動或是
進階模式,大多數機會都會出現上面這個
無法驗證帳戶名跟密碼的信息。但是在第三個狀況,透過進階模式,每次建立帳戶都可以成功。 然而在測試第一種跟第二種狀況的時候,偶而有一個信息跳出來”
Internet Accounts (System Preferences) can’t verify the identity of the server “junkyard2019.ddns.net””。我就聯想到如果讓自己簽署的憑證在macOS底下
永遠受信任,應該就沒有問題了。我嘗試了,也成功了。只要把憑證匯入macOS底下並永遠信任它,不論哪一種狀況下建立CardDAV跟CalDAV帳號都沒有問題。 現在,我來總結一下在建立DAV帳戶之前有哪些步驟要先做?
- 如果要使用Synology自己簽署的憑證,將該憑證匯出至macOS。
- 在Synology NAS底下把憑證匯出到一個crt憑證檔案。
|
匯出crt憑證檔案 |
- 將此crt憑證檔案在macOS匯入。
|
在macOS匯入剛剛匯出的憑證 |
- 在Keychain Access裡面左下角的Certificate設定中選取該憑證下拉選單的Get Info,點擊並展開Trust,然後在下拉選單中選擇Always Trust。
|
點擊憑證帶出選單並點擊Get Info |
|
點擊Always Trust取代系統預設值 |
- 如果要使用現有CA簽署的憑證,將該憑證匯入至Synology。
- 如果手上沒有CA簽署的憑證,可以按照此連接的教學取得。
- 隨後,點擊Control Panel/Security。
|
Synology 的Control Panel / Security |
- 點擊Certificate分頁。
|
Certificate分頁 |
- 點擊Add。
|
點擊Add然後Add a new certificate |
- 參考上面的截圖,點擊Add a new certificate然後Next。
- 點擊Import certificate然後Next。
|
匯入憑證 |
- 點擊Browse來瀏覽存放憑證檔案的資料夾。
|
瀏覽憑證檔案資料夾 |
- 參考上面的截圖,分別匯入Private Key, Certificate跟Intermediate certificate,然後點擊OK。
當上面的步驟完成之後,在先前Synology DSM的憑證分頁點擊
Configure,將下拉選單中CA簽署或自己簽署的憑證指派給
CardDAV Server和
WebDAV Server。
|
指派憑證給CardDAV/WebDAV伺服器 |
再來,繼續完成設定macOS的動作:
- 在macOS打開System Preferences / Internet Accoutns。
|
macOS的System Preferences / Internet Accounts |
- 點擊Add Other Account…:
|
點擊Add Other Accounts... |
- 如要設定CardDAV帳號,點擊CardDAV account。
- 如要設定CalDAV帳號,點擊CalDAV account。
- 從Account Type的下拉選單中選擇Advanced,然後輸入:
|
Account Type 選擇Advanced |
- User Name, 範例: junkadmin
- Password, 範例: ********
- Server Address:
- 格式: server_host.domain.com
- 範例: junkyard2019.ddns.com
- Server Path:
- 如要設定CardDAV:
- 格式: /addressbooks/users/<username>/addressbook/
- 範例: /addressbooks/users/junkadmin/addressbook/
- 如要設定CalDAV:
- 格式: /homes/<username>/<calendar_folder>/
- 範例: /homes/junkadmin/appointment/
- Port:
- 8443 for CardDAV
- 5006 for CalDAV
-
Use SSL: 保持打勾
|
CardDAV設定範例 |
|
CalDAV設定範例 |
|
添加CardDAV跟CalDAV帳號完成 |
- 最後,點擊Sign In繼續登入。
下面為同步結果的截圖:
|
macOS聯絡人同步結果 |
|
macOS行事曆同結果 |
iOS (iPhone & iPad) 與Synology CalDAV跟CardDAV同步
在過去幾年,蘋果的iOS不論是
iPhone或是
iPad一直以來在
CalDAV、
CardDAV、
Exchange以及市面上其他同類型帳戶方面的建置以及同步是最合拍的。在下面的實驗裡面,我們測試安裝最新版本
iOS 12.2的
iPhone XS。 之前,我不記得是哪個版本,好像是iOS 10或11,蘋果開始強制性地要求此類帳戶建置以、連線及同步必須透過
SSL/TLS協議。我個人覺得這樣子比較好。畢竟不是每台伺服器都會安裝SSL憑證也不是每個人都要透過SSL連線。就目前的iOS 12.2,
非SSL連線仍然行不通。 在CardDAV方面,當我輸入伺服器IP或主機名稱(無須輸入連接埠)、帳戶名、密碼之後,iOS非常迅速的偵測到伺服器URL。一下子就設定完畢。

在CalDAV方面,由於iOS無法偵測到正確的伺服器URL,這裡需要調整一些參數才可以搞定:
- 在iPhone上面,點進 Settings/Password & Accounts。
|
iPhone的Settings / Passwords & Accounts |
- 往下拉到Add Account並點進去。
|
iPhone的Add Account |
- 點進Other。
|
點進去Other |
- 點進Add CalDAV Account。
|
點擊Add CalDAV Account |
- 在輸入伺服器主機名稱、帳戶名、密碼之後,點右上角的Next。
|
輸入伺服器、帳號、密碼 |
- 跳出”Cannot Connect Using SSL”時,點Cancel。然後再點OK繼續。
|
無法透過SSL連結 |
|
無法確認帳戶資料 |
- 點在Advaned Settings。
|
進入Advanced Settings做微調 |
- 照以前來說,iOS通常都能偵測到完整的CalDAV伺服器URL,然後不用再做任何設定即可順利建置帳號。針對Synology的CalDAV服務,這部分則沒有辦法做到。所以我們只能按照先前提到的URL生成手法來手動補上完整的伺服器URL。範例如下:
-
https://junkyard2019.ddns.net:5006/homes/junkadmin/appointment
|
修改Account URL |
- 接下來點前一步驟截圖中左上角的< CalDAV。
- 點右上角的Next繼續。
|
點擊右上角的Next |
- 接下來會的頁面會出現完成建置才會有的打勾,然後下一個畫面中可以開啟或關閉行事曆或工作的選項。
|
CalDAV帳號設定完成,打勾表示確認 |
- 最後,點右上角的Save儲存設定。
|
點在右上角Save儲存設定 |
只要透過一些微調,還是可以讓iOS裝置與Synology NAS同步聯絡人、行事曆、工作。
Thunderbird與Synology CalDAV跟CardDAV同步
在Thunderbird底下, Lightning插件可以用於同步Synology的CalDAV行事曆。設定步驟如下:
- 打開Thunderbird並確認是否已經更新到目前最新的60.5.3版。
|
Thunderbird 官網 |
- 滑鼠右鍵點在行事曆區塊,然後點選New Calendar…。
|
新行事曆選單 |
- 點擊On the Network選項,然後點擊Next。
|
添加行事曆 - On the Network |
- 點擊Caldav並輸入按照先前提到的URL生成手法產生的伺服器URL,然後點擊Next
-
https://junkyard2019.ddns.net:5006/homes/junkadmin/appointment/
|
點選CalDAV,輸入伺服器URL |
- 輸入行事曆名稱還有點選電子郵件供會議邀請用途,然後點擊Next。
|
輸入行事曆名稱、輸入電子郵件地址供會議通知使用 |
- 在跳出來的Add Security Exception視窗裡面,點擊Confirm Security Exception。
|
確認憑證例外 |
- 此時,在新建立的行事曆上面點擊滑鼠右鍵,在下拉選單中,點選Synchronize做同步。
|
點擊Synchronize Calendars |
- 在跳出來的Authentication Required的視窗裡面,輸入帳戶名及密碼,然後點擊OK。
|
輸入帳戶名、密碼做認證 |
- 點擊Finish完成設定。
|
行事曆設定結束 |
- 最後,同步完成。
|
行事曆同步完成 |
在CardDAV方面,SOGo connector for Thunderbird可以拿來同步Synology的CardDAV聯絡人。設定步驟如下:
- 打開Thunderbird並確認SOGo connector for Thunderbird已經安裝。在SOGo connector官網點擊下面畫面圈起來的60.0.2完成下載的動作。
|
下載SOGo Connector for Thunderbird |
- 在Thunderbird裡面打開Address Book。
|
打開Address Book |
- 點擊左上角File然後New -> Remote Address Book。
|
打開 File / New / Remote Address Book |
- 在跳出來的視窗裡面,輸入連絡簿名稱並輸入按照先前提到的URL生成手法產生的伺服器URL,然後點擊OK。
-
https://junkyard2019.ddns.net:8443/addressbooks/users/junkadmin/addressbook/
|
輸入行事曆名稱以及伺服器URL |
- 在跳出來的Add Security Exception視窗裡面,點擊Confirm Security Exception。
|
確認憑證例外 |
- 此時,在新建立的連絡簿上面點擊滑鼠右鍵,在下拉選單中,點選Synchronize做同步。
|
點選Address Book然後點擊Synchronize同步 |
- 在跳出來的Authentication Required的視窗裡面,輸入帳戶名及密碼,然後點擊OK。
|
輸入帳戶名、密碼做認證 |
- 最後,同步完成。
|
聯絡人同步完成 |
關於Synology CalDAV跟CardDAV伺服器功能的一些小編感想
Synology提供小到個人、大到企業的NAS解決方案。當然啦,可以下載的一卡車模組化App真的有幫老闆省一筆錢,例如這個CalDAV跟CardDAV伺服器功能就可以免去再建置一台專職的伺服器。但是,我先前指出來的一些小問題例如: 行事曆app的行事曆資料夾跟WebDAV App裡面的行事曆資料夾無法整合、聯絡人裡面的地址區塊的錯亂、官方知識庫小編對於CalDAV伺服器URL小偷懶沒有做更新等等難免有點小困擾。扣除這些小問題,還是能夠透過小撇步還有修改URL格式進而達到讓用戶端同步的目的。其實。。。也不差啦~!
非常不错!!!
回覆刪除