Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save yugoslavskiy/bb379b7fcfc4f0e8467461d97566fb2c to your computer and use it in GitHub Desktop.
Save yugoslavskiy/bb379b7fcfc4f0e8467461d97566fb2c to your computer and use it in GitHub Desktop.
Custom Apple Mail HTML signature creation guide

HTML Signature in Apple Mail.app

created_date: 02.07.2016
last_update_date: 02.07.2016
author: @yugoslavskiy

Links

Предпосылки

Все просто. Apple Mail некорректно обрабатывает скопированные в него из Outlook подписи (в моем случае - изображение логотипа никак не умещалось слева от текста, таблица ни в какую не хотела отображаться).
Собственно, пара пачек выкуренных манов, и вот ты уже читаешь этот гайд.

Генерим временные подписи в Apple Mail

Сперва-наперво, посредством Apple Mail, нагенерим под необходимой учеткой 4 подписи (ну или сколько тебе надо):

  • ru_new
  • ru_reply
  • eng_new
  • eng_reply

UDP: если в подписи нужны картинки - при создании копируй в нее необходимую картинку

Где лежат подписи

  • iCloud Drive

    ~/Library/Mobile\ Documents/com~apple~mail/Data/V3/MailData/Signatures/
    
  • Local

    ~/Library/Mail/V3/MailData/Signatures/
    
    or 
    
    ~/Library/Mobile\ Documents/com~apple~mail/Data/V3/MailData/Signatures/
    

Внедрение изображений

Возьми изображение (вероятно, лого, которое больше всего нравится по качеству), но без фанатизма, не сильно тяжелое. Его необходимо особым образом объявить перед тем как внедрять в код:

--boundary
Content-Type: image/png; name="sig.png"
Content-Disposition: inline; filename="sig.png"
Content-Transfer-Encoding: base64
Content-ID: <0123456789>
Content-Location: sig.png

base64 data

--boundary

И только после этого, на него можно ссылаться следующим образом в html:

<img src="cid:0123456789">

UDP: если при создании подписи ты скопировал нужную картинку - ничего не трогай, читай дальше

Двойное дно

Картинки отчаянно не хотят жениться с формой подписи из предыдущей главы. Необходимо еще малямс плясануть с бубном. Рабочий алгоритм:

  1. Создаешь подпись способом виндузятника - копи пейст (вместе с изображением) - Mail сгенерит id подписи, и все внутренние теги/ссылки.

  2. Редактируешь эту подпись, вставляя свое body, но сохраняя boundary, сгенерированные Mail. Выглядит оно (boundary) следующим образом:

--Apple-Mail=_B9098869-CD71-4DD8-8E02-28D98C7B8DB0

Без этого не заработает.

  1. Делаешь ссылку на картинку таким же способом, как это сделал Mail автоматически:
<span class=3D"Apple-string-attachment"><object height=3D64 width=3D139 type=3Dapplication/x-apple-msg-attachment data=3D"cid:[email protected]"></object></span>

Само собой, cid рисунка тоже берешь тот, который был сгенерен Mail'ом автоматически.

  1. Взлетело.

Добавление иного изображения

Когда все cid/boundary и прочее создалось, ты можешь захотеть сменить изображение "на лету", то есть не повторяя все с самого начала. Соответственно, все что для этого нужно - заменить base64-кодированную картинку. Ссылка на нее останется активной, никакой проверки целостности нет. Делаем следующее:

base64 <твое_новое_изображение> | sed -r 's/(.{76})/\1\n/g'

И копируешь полученный base64 код на место предыдущего. Профит. (не забудь залочить файл)

Lock / unlock file

Нужно залочить файл, ибо Mail его перепишет:

chflags uchg ~/Library/Mail/V3/MailData/Signatures/*.mailsignature # обрати внимание - этой командой ты залочишь ВСЕ файлы

Ну и разлочить, если надо:

chflags nouchg ~/Library/Mail/V3/MailData/Signatures/*.mailsignature

Готовый html-код подписи

Message-Id: <07025295-CD39-49E4-9A74-404F58675B7F>
Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\))
Content-Type: multipart/related;
  type="text/html";
  boundary="Apple-Mail=_B9098869-CD71-4DD8-8E02-28D98C7B8DB0"


--Apple-Mail=_B9098869-CD71-4DD8-8E02-28D98C7B8DB0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
  charset=utf-8

<body>
  <br />
  <style type='text/css'>
    a.link{margin:0;padding:0;border:none !important;text-decoration:none !important;}
    table,tr,td,a,span{font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;}
  </style>
  <meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
  <table id="sig" width='320' cellspacing='0' cellpadding='0' border-spacing='0' style="width:320px;margin:0;padding:0;">
  <div style="position:relative;display:inline-block;">
  <table>
     <tr>
      <br/> <span style="font-size:12px;color: rgb(0, 32, 96);"> С уважением, </span>
      <br/>
      <br/>
      <br/>
    <tr>
    <td valign='top' width="178" style="width:178px;margin:0;padding:0;vertical-align:top;">
    <span class=3D"Apple-string-attachment"><object height=3D64 width=3D139 type=3Dapplication/x-apple-msg-attachment data=3D"cid:[email protected]"></object></span>
    </td>
    <td style="padding-left:15px;">
      <p style="line-height:14px;">
        <span style="font-size:13px;color: rgb(0, 32, 96);"><b> ФИО </b></span>
        <br/> <span style="font-size:12px;color: rgb(0, 32, 96);"> Департамент  </span>
        <br/> <span style="font-size:12px;color: rgb(0, 32, 96);"> Должность </span>
        <br/>
        <br/> <span style="font-size:13px;color: rgb(0, 32, 96);"><b> Компания </b></span>
        <br/> <span style="font-size:12px;color: rgb(0, 32, 96);"> Адрес </span>
        <br/> <span style="font-size:12px;color: rgb(0, 32, 96);"> Адрес </span>
        <br/> <span style="font-size:12px;color: rgb(0, 32, 96);"> Тел.: &nbsp;&thinsp;&thinsp; +x (xxx) xxx xxxx (доб. xxxx) </span>
        <br/> <span style="font-size:12px;color: rgb(0, 32, 96);"> Моб.: &thinsp; +x (xxx) xxx xxxx </span>
        <br/> <span style="font-size:12px;color: rgb(0, 32, 96);"> Факс: &thinsp;&thinsp;&thinsp;+x (xxx) xxx xxxx </span>
        <br/> <span style="font-size:12px;color: rgb(0, 32, 96);"> E-mail: <a href="mailto:[email protected]">[email protected]</a> </span>
        <br/> <span style="font-size:12px;color: rgb(0, 32, 96);"> <a href="http://www.xxxx.xx/">www.xxxxx.xx</a> </span>
      </p>
    </td>
    </tr>
   </table>
  </div>
  </table>
  </td>
  </tr>
</table>
</body>

--Apple-Mail=_B9098869-CD71-4DD8-8E02-28D98C7B8DB0
Content-Transfer-Encoding: base64
Content-Disposition: inline;
  filename=image002.jpg
Content-Type: image/jpeg;
  name="image002.jpg"
Content-Id: <image002[email protected]>

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
KUoFKUoFKUoFKUoFKUoP/9k=
--Apple-Mail=_B9098869-CD71-4DD8-8E02-28D98C7B8DB0--
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment