-
Ruben Seggers authorede5d4eeba
---
title: Title
keywords: fastai
sidebar: home_sidebar
nb_path: "nbs/gmail.ipynb"
---
<!--
#################################################
### THIS FILE WAS AUTOGENERATED! DO NOT EDIT! ###
#################################################
# file to edit: nbs/gmail.ipynb
# command to build the docs after a change: nbdev_build_docs
-->
<div class="container" id="notebook-container">
{% raw %}
<div class="cell border-box-sizing code_cell rendered">
</div>
{% endraw %}
{% raw %}
<div class="cell border-box-sizing code_cell rendered">
</div>
{% endraw %}
{% raw %}
<div class="cell border-box-sizing code_cell rendered">
</div>
{% endraw %}
{% raw %}
<div class="cell border-box-sizing code_cell rendered">
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="output_markdown rendered_html output_subarea ">
<h2 id="IMAPClient" class="doc_header"><code>class</code> <code>IMAPClient</code><a href="https://gitlab.memri.io/memri/integrators/tree/master/integrators/importers/gmail.py#L13" class="source_link" style="float:right">[source]</a></h2><blockquote><p><code>IMAPClient</code>(<strong><code>username</code></strong>, <strong><code>app_pw</code></strong>, <strong><code>host</code></strong>=<em><code>'imap.gmail.com'</code></em>, <strong><code>port</code></strong>=<em><code>993</code></em>, <strong><code>inbox</code></strong>=<em><code>'"[Gmail]/All Mail"'</code></em>)</p>
</blockquote>
</div>
</div>
</div>
</div>
</div>
{% endraw %}
{% raw %}
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
<div class="cell border-box-sizing code_cell rendered">
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="output_markdown rendered_html output_subarea ">
<h4 id="get_message_content" class="doc_header"><code>get_message_content</code><a href="https://gitlab.memri.io/memri/integrators/tree/master/integrators/importers/gmail.py#L92" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>get_message_content</code>(<strong><code>message</code></strong>)</p>
</blockquote>
</div>
</div>
</div>
</div>
</div>
{% endraw %}
{% raw %}
<div class="cell border-box-sizing code_cell rendered">
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="output_markdown rendered_html output_subarea ">
<h4 id="get_addresses_from_message" class="doc_header"><code>get_addresses_from_message</code><a href="https://gitlab.memri.io/memri/integrators/tree/master/integrators/importers/gmail.py#L108" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>get_addresses_from_message</code>(<strong><code>message</code></strong>, <strong><code>field</code></strong>)</p>
</blockquote>
</div>
</div>
</div>
</div>
</div>
{% endraw %}
{% raw %}
<div class="cell border-box-sizing code_cell rendered">
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="output_markdown rendered_html output_subarea ">
<h4 id="get_timestamp_from_message" class="doc_header"><code>get_timestamp_from_message</code><a href="https://gitlab.memri.io/memri/integrators/tree/master/integrators/importers/gmail.py#L114" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>get_timestamp_from_message</code>(<strong><code>message</code></strong>)</p>
</blockquote>
</div>
</div>
</div>
</div>
</div>
{% endraw %}
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
{% raw %}
<div class="cell border-box-sizing code_cell rendered">
</div>
{% endraw %}
{% raw %}
<div class="cell border-box-sizing code_cell rendered">
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="output_markdown rendered_html output_subarea ">
<h4 id="create_item_from_mail" class="doc_header"><code>create_item_from_mail</code><a href="https://gitlab.memri.io/memri/integrators/tree/master/integrators/importers/gmail.py#L124" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>create_item_from_mail</code>(<strong><code>mail</code></strong>, <strong><code>thread_id</code></strong>=<em><code>None</code></em>)</p>
</blockquote>
</div>
</div>
</div>
</div>
</div>
{% endraw %}
{% raw %}
<div class="cell border-box-sizing code_cell rendered">
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="output_markdown rendered_html output_subarea ">
<h4 id="download_mails" class="doc_header"><code>download_mails</code><a href="https://gitlab.memri.io/memri/integrators/tree/master/integrators/importers/gmail.py#L166" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>download_mails</code>(<strong><code>imap_client</code></strong>, <strong><code>gmail_ids</code></strong>, <strong><code>stop_at</code></strong>)</p>
</blockquote>
</div>
</div>
</div>
</div>
</div>
{% endraw %}
{% raw %}
<div class="cell border-box-sizing code_cell rendered">
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="output_markdown rendered_html output_subarea ">
<h4 id="merge_duplicate_items" class="doc_header"><code>merge_duplicate_items</code><a href="https://gitlab.memri.io/memri/integrators/tree/master/integrators/importers/gmail.py#L184" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>merge_duplicate_items</code>(<strong><code>all_mails</code></strong>)</p>
</blockquote>
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
</div>
</div>
</div>
</div>
</div>
{% endraw %}
{% raw %}
<div class="cell border-box-sizing code_cell rendered">
</div>
{% endraw %}
{% raw %}
<div class="cell border-box-sizing code_cell rendered">
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="output_markdown rendered_html output_subarea ">
<h2 id="GmailImporter" class="doc_header"><code>class</code> <code>GmailImporter</code><a href="" class="source_link" style="float:right">[source]</a></h2><blockquote><p><code>GmailImporter</code>(<strong>*<code>args</code></strong>, <strong>**<code>kwargs</code></strong>) :: <a href="/integrators/indexers.indexer.html#ImporterBase"><code>ImporterBase</code></a></p>
</blockquote>
<p>Imports email from GMail.</p>
</div>
</div>
</div>
</div>
</div>
{% endraw %}
{% raw %}
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># Store your credentials in this file:</span>
<span class="n">file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s1">'tmp/credentials_gmail.txt'</span><span class="p">,</span><span class="s1">'r'</span><span class="p">)</span>
<span class="n">imap_host</span> <span class="o">=</span> <span class="s1">'imap.gmail.com'</span>
<span class="n">imap_user</span> <span class="o">=</span> <span class="n">file</span><span class="o">.</span><span class="n">readline</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span>
<span class="n">imap_pw</span> <span class="o">=</span> <span class="n">file</span><span class="o">.</span><span class="n">readline</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span>
<span class="n">pod_client</span> <span class="o">=</span> <span class="n">PodClient</span><span class="p">()</span>
<span class="n">pod_client</span><span class="o">.</span><span class="n">delete_all</span><span class="p">()</span>
<span class="n">importer_run</span> <span class="o">=</span> <span class="n">ImporterRun</span><span class="o">.</span><span class="n">from_data</span><span class="p">(</span><span class="n">progress</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">username</span><span class="o">=</span><span class="n">imap_user</span><span class="p">,</span> <span class="n">password</span><span class="o">=</span><span class="n">imap_pw</span><span class="p">)</span>
<span class="n">importer</span> <span class="o">=</span> <span class="n">GmailImporter</span><span class="o">.</span><span class="n">from_data</span><span class="p">()</span>
<span class="n">importer</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">importer_run</span><span class="o">=</span><span class="n">importer_run</span><span class="p">,</span> <span class="n">pod_client</span><span class="o">=</span><span class="n">pod_client</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
<div class="output_area">
<div class="output_subarea output_stream output_stderr output_text">
<pre>UsageError: Line magic function `%nbdev_slow_test` not found.
</pre>
</div>
</div>
</div>
</div>
</div>
{% endraw %}
{% raw %}
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">test</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">"""</span><span class="se">\</span>
<span class="s2">Message-id: 1234</span><span class="se">\r</span><span class="s2"></span>
<span class="s2">From: user1 <a@gmail.com></span><span class="se">\r</span><span class="s2"></span>
<span class="s2">To: user1 <b@gmail.com></span><span class="se">\r</span><span class="s2"></span>
<span class="s2">Reply-to: user1 <c@gmail.com></span><span class="se">\r</span><span class="s2"></span>
<span class="s2">Subject: the subject</span><span class="se">\r</span><span class="s2"></span>
<span class="s2">Date: Mon, 04 May 2020 00:37:44 -0700</span><span class="se">\r</span><span class="s2"></span>
<span class="s2">This is content"""</span>
<span class="c1">#mail_message = email.message_from_string(test)</span>
<span class="n">mail_item</span> <span class="o">=</span> <span class="n">create_item_from_mail</span><span class="p">(</span><span class="n">test</span><span class="p">,</span> <span class="s1">'message_channel_id'</span><span class="p">)</span>
<span class="k">assert</span> <span class="n">mail_item</span><span class="o">.</span><span class="n">externalId</span> <span class="o">==</span> <span class="s1">'1234'</span>
<span class="k">assert</span> <span class="n">mail_item</span><span class="o">.</span><span class="n">sender</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">externalId</span> <span class="o">==</span> <span class="s1">'a@gmail.com'</span>
<span class="k">assert</span> <span class="n">mail_item</span><span class="o">.</span><span class="n">receiver</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">externalId</span> <span class="o">==</span> <span class="s1">'b@gmail.com'</span>
<span class="k">assert</span> <span class="n">mail_item</span><span class="o">.</span><span class="n">replyTo</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">externalId</span> <span class="o">==</span> <span class="s1">'c@gmail.com'</span>
<span class="k">assert</span> <span class="n">mail_item</span><span class="o">.</span><span class="n">subject</span> <span class="o">==</span> <span class="s1">'the subject'</span>
<span class="k">assert</span> <span class="n">mail_item</span><span class="o">.</span><span class="n">content</span> <span class="o">==</span> <span class="s1">'This is content'</span>
<span class="k">assert</span> <span class="n">mail_item</span><span class="o">.</span><span class="n">dateSent</span> <span class="o">==</span> <span class="n">get_timestamp_from_message</span><span class="p">(</span><span class="n">email</span><span class="o">.</span><span class="n">message_from_bytes</span><span class="p">(</span><span class="n">test</span><span class="p">))</span>
<span class="k">assert</span> <span class="n">mail_item</span><span class="o">.</span><span class="n">messageChannel</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">externalId</span> <span class="o">==</span> <span class="s1">'message_channel_id'</span>
</pre></div>
</div>
</div>
</div>
</div>
{% endraw %}
{% raw %}
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">message</span> <span class="o">=</span> <span class="n">email</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">EmailMessage</span><span class="p">()</span>
<span class="n">message</span><span class="o">.</span><span class="n">set_content</span><span class="p">(</span><span class="s1">'aa'</span><span class="p">)</span>
<span class="n">message</span><span class="o">.</span><span class="n">add_attachment</span><span class="p">(</span><span class="sa">b</span><span class="s1">'bb'</span><span class="p">,</span> <span class="n">maintype</span><span class="o">=</span><span class="s1">'image'</span><span class="p">,</span> <span class="n">subtype</span><span class="o">=</span><span class="s1">'jpeg'</span><span class="p">,</span> <span class="n">filename</span><span class="o">=</span><span class="s1">'sample.jpg'</span><span class="p">)</span>
<span class="n">message</span><span class="o">.</span><span class="n">add_attachment</span><span class="p">(</span><span class="sa">b</span><span class="s1">'cc'</span><span class="p">,</span> <span class="n">maintype</span><span class="o">=</span><span class="s1">'image'</span><span class="p">,</span> <span class="n">subtype</span><span class="o">=</span><span class="s1">'jpeg'</span><span class="p">,</span> <span class="n">filename</span><span class="o">=</span><span class="s1">'sample2.jpg'</span><span class="p">)</span>
<span class="n">content</span><span class="p">,</span> <span class="n">attachments</span> <span class="o">=</span> <span class="n">get_message_content</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
<span class="k">assert</span> <span class="n">content</span> <span class="o">==</span> <span class="s1">'aa</span><span class="se">\n</span><span class="s1">'</span>
<span class="k">assert</span> <span class="n">attachments</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">get_content</span><span class="p">()</span> <span class="o">==</span> <span class="sa">b</span><span class="s1">'bb'</span>
<span class="k">assert</span> <span class="n">attachments</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">get_content</span><span class="p">()</span> <span class="o">==</span> <span class="sa">b</span><span class="s1">'cc'</span>
</pre></div>
351352353354355356357358359360361
</div>
</div>
</div>
</div>
{% endraw %}
</div>