2015-05-04 157 views
0

我試圖在已經寫好的電子郵件上啓動Mac OS(和其他操作系統,但我只有Mac有問題)的默認郵件應用程序。電子郵件的正文包含HTML。在Mac OS上用html打開默認的郵件應用程序

body = "<span style='font-weight:bold'>Title : </span>{}</br> \ 
     <span style='font-weight:bold'>Journal : </span>{}</br></br> \ 
     <span style='font-weight:bold'>Abstract : </span></br></br>{}" 

body = body.format(title, journal, abstract) 
url = "mailto:?subject={}&body={}" 
url = url.format(title, body) 

if sys.platform=='win32': 
    os.startfile(url) 

elif sys.platform=='darwin': 
    subprocess.Popen(['open', url]) 

else: 
    # Create an url to be opened with a mail client 
    try: 
     subprocess.Popen(['xdg-email', url]) 
    except OSError: 
     self.l.error("shareByEmail: OSError") 

在windows和linux上,此代碼只是打開默認郵件應用程序,並填充所有字段。電子郵件已準備好發送,並且html標籤不可見(標籤正確轉換爲格式化文本)。

但在Mac OS上,電子郵件的正文是一個簡單的文本,html標籤完全可見(文本未格式化)。

這是郵件客戶端的設置問題嗎?它應該發生嗎?我們可以在Mac OS上的電子郵件正文中編寫HTML嗎?

我不得不提到的幾件事情:

  • 我不會在我的電腦上測試代碼(我不擁有一臺Mac),所以我沒有設置郵件應用自己

  • 的Mac OS版本,我在測試代碼是優山美地,郵件應用程序是默認的(未雷鳥)

  • 我不能使用WebBrowser模塊

回答

0

你想要做什麼不應該工作任何地方

mailto: URL方案中RFC 6068定義,其表示:

特殊的「主體」表示相關的 是消息的主體中。 「正文」字段值旨在 包含 消息的第一個文本/普通正文部分的內容。 「body」僞頭字段主要用於生成用於自動處理的短文本消息( 作爲郵件列表的「訂閱」消息),而不是用於一般MIME 機構。除了基於UTF-8和 百分比編碼的字符編碼之外,對於「主體」字段值不使用附加編碼(例如,base64或 quoted-printable;參見[RFC2045])。因此,與'mailto'URI中的消息編碼(例如, 內容傳輸編碼)相關的頭部字段是不相關的,並且必須被忽略。爲了這個特殊目的,「body」僞頭字段名稱已經與IANA一起註冊了 (見第8.2節)。

事實上,它恰好適用於您在Windows和Linux上設置的任何默認郵件程序,這意味着這些郵件程序正在做一些非標準的事情,您不應該依賴這一點。另外,將整個身體作爲命令行參數傳遞(就像你在所有三個平臺上進行的操作一樣)可能會遇到命令行長度的限制,並且許多郵件程序將截斷一個太長的mailto,即使它沒有受到傷害。

同時:

我們能寫HTML在Mac OS的電子郵件的正文?

是的,但沒有與mailto: URL。例如,您可以使用AppleEvents編寫處理「標準郵件套件」(當然包括Mail.app)的任何郵件程序。有關示例代碼,請參閱SBSendEmail(在ObjC中,但使用ScriptingBridge,您可以從Python中類似地訪問),這樣做。

+0

好的,謝謝你的回答。我知道我不能在mailto的主體中使用HTML。但我不想使用任何複雜的解決方案,如蘋果腳本或任何其他。我會簡化我的身體,這是一個更可接受的解決方案。我假設我仍然可以在mailto的正文字段中傳遞一個URL和幾行純文本,對吧? – Rififi

+0

@Rififi:是的,只要「少」與你在這裏的順序相同,它就在'Mail.app'將從'mailto'中讀取的限制以及OS X可以在命令行中適用的限制。 (如果你想讓音樂變得更大,你需要查找所有相關版本的限制,或者針對所有相關版本進行測試,但這絕對夠小。) – abarnert

相關問題