Skip to content

Commit d8052c8

Browse files
committed
fixes #9
1 parent 98b391b commit d8052c8

File tree

2 files changed

+24
-14
lines changed

2 files changed

+24
-14
lines changed

markdown_merge/core.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,21 +38,22 @@ def attach_file(msg, f):
3838
msg.attach(part)
3939

4040
# %% ../nbs/00_core.ipynb
41-
def create_multipart_msg(subj, from_addr, to_addrs, md=None, html=None, attach=None):
41+
def create_multipart_msg(subj, from_addr, to_addrs, md=None, html=None, attach=None, hdrs=None):
4242
"Create a multipart email with markdown text and HTML"
4343
msg = MIMEMultipart('alternative', policy=EmailPolicy())
4444
msg['Subject'],msg['From'] = subj,str(from_addr)
45+
for k,v in (hdrs or {}).items(): msg[k]=v
4546
msg['To'] = ', '.join([str(a) for a in listify(to_addrs)])
4647
if md: msg.attach(MIMEText(md, 'plain'))
4748
if html: msg.attach(MIMEText(html, 'html'))
4849
for f in listify(attach): attach_file(msg, f)
4950
return msg
5051

5152
# %% ../nbs/00_core.ipynb
52-
def md2email(subj, from_addr, to_addrs, md, attach=None):
53+
def md2email(subj, from_addr, to_addrs, md, attach=None, hdrs=None):
5354
"Create a multipart email from markdown"
5455
html = markdown(md)
55-
return create_multipart_msg(subj, from_addr, to_addrs, md=md, html=html, attach=attach)
56+
return create_multipart_msg(subj, from_addr, to_addrs, md=md, html=html, attach=attach, hdrs=hdrs)
5657

5758
# %% ../nbs/00_core.ipynb
5859
def smtp_connection(host, port, user=None, password=None, use_ssl=True, use_tls=False):
@@ -65,18 +66,18 @@ def smtp_connection(host, port, user=None, password=None, use_ssl=True, use_tls=
6566
# %% ../nbs/00_core.ipynb
6667
class MarkdownMerge:
6768
"Send templated email merge messages formatted with Markdown"
68-
def __init__(self, addrs, from_addr, subj, msg, smtp_cfg=None, inserts=None, test=False):
69+
def __init__(self, addrs, from_addr, subj, msg, smtp_cfg=None, inserts=None, test=False, hdrs=None):
6970
self.addrs,self.from_addr,self.subj,self.msg,self.i = addrs,from_addr,subj,msg,0
7071
self.inserts = [{}]*len(addrs) if inserts is None else inserts
71-
self.smtp_cfg,self.test = smtp_cfg,test
72+
self.smtp_cfg,self.test,self.hdrs = smtp_cfg,test,hdrs
7273

7374
def send_msgs(self, pause=0.2):
7475
"Send all unsent messages to `addrs` with `pause` secs between each send"
7576
conn = smtp_connection(**self.smtp_cfg)
7677
while self.i < len(self.addrs):
7778
addr,insert = self.addrs[self.i],self.inserts[self.i]
7879
msg = self.msg.format(**insert)
79-
eml = md2email(self.subj, self.from_addr, addr, md=msg)
80+
eml = md2email(self.subj, self.from_addr, addr, md=msg, hdrs=self.hdrs)
8081
if self.test: print(f"To: {addr}\n{'-'*40}\n{msg}\n{'='*40}\n")
8182
else:
8283
conn.send_message(eml)

nbs/00_core.ipynb

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -158,10 +158,11 @@
158158
"outputs": [],
159159
"source": [
160160
"#| export\n",
161-
"def create_multipart_msg(subj, from_addr, to_addrs, md=None, html=None, attach=None):\n",
161+
"def create_multipart_msg(subj, from_addr, to_addrs, md=None, html=None, attach=None, hdrs=None):\n",
162162
" \"Create a multipart email with markdown text and HTML\"\n",
163163
" msg = MIMEMultipart('alternative', policy=EmailPolicy())\n",
164164
" msg['Subject'],msg['From'] = subj,str(from_addr)\n",
165+
" for k,v in (hdrs or {}).items(): msg[k]=v\n",
165166
" msg['To'] = ', '.join([str(a) for a in listify(to_addrs)])\n",
166167
" if md: msg.attach(MIMEText(md, 'plain'))\n",
167168
" if html: msg.attach(MIMEText(html, 'html'))\n",
@@ -176,9 +177,11 @@
176177
"metadata": {},
177178
"outputs": [],
178179
"source": [
179-
"msg = create_multipart_msg('Test Subject', from_addr, to_addrs, md='**Bold text**', html='<b>Bold text</b>')\n",
180+
"msg = create_multipart_msg('Test Subject', from_addr, to_addrs, hdrs={'atest':'foo'},\n",
181+
" md='**Bold text**', html='<b>Bold text</b>')\n",
180182
"test_eq(msg['Subject'], 'Test Subject')\n",
181183
"test_eq(msg['From'], str(from_addr))\n",
184+
"test_eq(msg['atest'], 'foo')\n",
182185
"test_eq(len(msg.get_payload()), 2)\n",
183186
"test_eq(msg.get_payload()[0].get_content_type(), 'text/plain')\n",
184187
"test_eq(msg.get_payload()[1].get_content_type(), 'text/html')\n",
@@ -193,10 +196,10 @@
193196
"outputs": [],
194197
"source": [
195198
"#| export\n",
196-
"def md2email(subj, from_addr, to_addrs, md, attach=None):\n",
199+
"def md2email(subj, from_addr, to_addrs, md, attach=None, hdrs=None):\n",
197200
" \"Create a multipart email from markdown\"\n",
198201
" html = markdown(md)\n",
199-
" return create_multipart_msg(subj, from_addr, to_addrs, md=md, html=html, attach=attach)"
202+
" return create_multipart_msg(subj, from_addr, to_addrs, md=md, html=html, attach=attach, hdrs=hdrs)"
200203
]
201204
},
202205
{
@@ -384,18 +387,18 @@
384387
"#| export\n",
385388
"class MarkdownMerge:\n",
386389
" \"Send templated email merge messages formatted with Markdown\"\n",
387-
" def __init__(self, addrs, from_addr, subj, msg, smtp_cfg=None, inserts=None, test=False):\n",
390+
" def __init__(self, addrs, from_addr, subj, msg, smtp_cfg=None, inserts=None, test=False, hdrs=None):\n",
388391
" self.addrs,self.from_addr,self.subj,self.msg,self.i = addrs,from_addr,subj,msg,0\n",
389392
" self.inserts = [{}]*len(addrs) if inserts is None else inserts\n",
390-
" self.smtp_cfg,self.test = smtp_cfg,test\n",
393+
" self.smtp_cfg,self.test,self.hdrs = smtp_cfg,test,hdrs\n",
391394
"\n",
392395
" def send_msgs(self, pause=0.2):\n",
393396
" \"Send all unsent messages to `addrs` with `pause` secs between each send\"\n",
394397
" conn = smtp_connection(**self.smtp_cfg)\n",
395398
" while self.i < len(self.addrs):\n",
396399
" addr,insert = self.addrs[self.i],self.inserts[self.i]\n",
397400
" msg = self.msg.format(**insert)\n",
398-
" eml = md2email(self.subj, self.from_addr, addr, md=msg)\n",
401+
" eml = md2email(self.subj, self.from_addr, addr, md=msg, hdrs=self.hdrs)\n",
399402
" if self.test: print(f\"To: {addr}\\n{'-'*40}\\n{msg}\\n{'='*40}\\n\")\n",
400403
" else:\n",
401404
" conn.send_message(eml)\n",
@@ -512,7 +515,13 @@
512515
]
513516
}
514517
],
515-
"metadata": {},
518+
"metadata": {
519+
"kernelspec": {
520+
"display_name": "python3",
521+
"language": "python",
522+
"name": "python3"
523+
}
524+
},
516525
"nbformat": 4,
517526
"nbformat_minor": 5
518527
}

0 commit comments

Comments
 (0)