<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: How to download email attachments? in APIs &amp; Integrations</title>
    <link>https://community.hubspot.com/t5/APIs-Integrations/How-to-download-email-attachments/m-p/1192717#M83972</link>
    <description>&lt;P&gt;Hello&amp;nbsp;&lt;a href="https://community.hubspot.com/t5/user/viewprofilepage/user-id/127074"&gt;@Jaycee_Lewis&lt;/a&gt;&amp;nbsp;,&lt;BR /&gt;The endpoint you provided was exactly what I needed.&lt;BR /&gt;I'm really grateful for your support.&lt;/P&gt;</description>
    <pubDate>Mon, 25 Aug 2025 09:09:20 GMT</pubDate>
    <dc:creator>G_Gorgiladze</dc:creator>
    <dc:date>2025-08-25T09:09:20Z</dc:date>
    <item>
      <title>How to download email attachments?</title>
      <link>https://community.hubspot.com/t5/APIs-Integrations/How-to-download-email-attachments/m-p/1191953#M83928</link>
      <description>&lt;P&gt;Hello everyone,&lt;BR /&gt;I'm working on an automation project code that will help us download email attachments from HubSpot to store them locally as well.&lt;BR /&gt;To summarize the logic, the following functions are supposed to retrieve the file URL using its ID, and then download the URL's contents via a simple GET request.&lt;/P&gt;&lt;P&gt;Here's the code:&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;DIV&gt;&lt;PRE&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;get_file_download_url&lt;/SPAN&gt;(&lt;SPAN&gt;file_id&lt;/SPAN&gt;, &lt;SPAN&gt;access_token&lt;/SPAN&gt;, &lt;SPAN&gt;logger) :&lt;/SPAN&gt;&lt;BR /&gt;    &lt;SPAN&gt;"""Fetch the real HubSpot download URL for a file."""&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;url &lt;/SPAN&gt;= &lt;SPAN&gt;f"https://api.hubapi.com/files/v3/files/&lt;/SPAN&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;SPAN&gt;file_id&lt;/SPAN&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN&gt;"&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;headers &lt;/SPAN&gt;= {&lt;SPAN&gt;"Authorization"&lt;/SPAN&gt;: &lt;SPAN&gt;f"Bearer &lt;/SPAN&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;SPAN&gt;access_token&lt;/SPAN&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN&gt;"&lt;/SPAN&gt;}&lt;BR /&gt;        &lt;SPAN&gt;resp &lt;/SPAN&gt;= requests.get(&lt;SPAN&gt;url&lt;/SPAN&gt;, &lt;SPAN&gt;headers&lt;/SPAN&gt;=&lt;SPAN&gt;headers&lt;/SPAN&gt;)&lt;BR /&gt;        &lt;SPAN&gt;resp&lt;/SPAN&gt;.raise_for_status()&lt;BR /&gt;        &lt;SPAN&gt;data &lt;/SPAN&gt;= &lt;SPAN&gt;resp&lt;/SPAN&gt;.json()&lt;BR /&gt;        &lt;SPAN&gt;return &lt;/SPAN&gt;&lt;SPAN&gt;data&lt;/SPAN&gt;.get(&lt;SPAN&gt;"url"&lt;/SPAN&gt;), &lt;SPAN&gt;data&lt;/SPAN&gt;.get(&lt;SPAN&gt;"name"&lt;/SPAN&gt;)&lt;BR /&gt;    &lt;SPAN&gt;except &lt;/SPAN&gt;&lt;SPAN&gt;Exception &lt;/SPAN&gt;&lt;SPAN&gt;as &lt;/SPAN&gt;&lt;SPAN&gt;e&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;logger&lt;/SPAN&gt;.error(&lt;SPAN&gt;f"Error fetching file details for &lt;/SPAN&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;SPAN&gt;file_id&lt;/SPAN&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN&gt;: &lt;/SPAN&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;SPAN&gt;e&lt;/SPAN&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN&gt;"&lt;/SPAN&gt;)&lt;BR /&gt;        &lt;SPAN&gt;return None&lt;/SPAN&gt;, &lt;SPAN&gt;None&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;download_file_from_hubspot&lt;/SPAN&gt;(&lt;SPAN&gt;file_id&lt;/SPAN&gt;, &lt;SPAN&gt;access_token&lt;/SPAN&gt;, &lt;SPAN&gt;logger) :&lt;/SPAN&gt;&lt;BR /&gt;    &lt;SPAN&gt;"""Download a HubSpot file by fileId using secure API request."""&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;file_url&lt;/SPAN&gt;, &lt;SPAN&gt;file_name &lt;/SPAN&gt;= get_file_download_url(&lt;SPAN&gt;file_id&lt;/SPAN&gt;, &lt;SPAN&gt;access_token&lt;/SPAN&gt;, &lt;SPAN&gt;logger&lt;/SPAN&gt;)&lt;BR /&gt;        &lt;SPAN&gt;if not &lt;/SPAN&gt;&lt;SPAN&gt;file_url&lt;/SPAN&gt;:&lt;BR /&gt;            &lt;SPAN&gt;logger&lt;/SPAN&gt;.error(&lt;SPAN&gt;f"No download URL found for file &lt;/SPAN&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;SPAN&gt;file_id&lt;/SPAN&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN&gt;"&lt;/SPAN&gt;)&lt;BR /&gt;            &lt;SPAN&gt;return None&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        with &lt;/SPAN&gt;tempfile.NamedTemporaryFile(&lt;SPAN&gt;delete&lt;/SPAN&gt;=&lt;SPAN&gt;False&lt;/SPAN&gt;) &lt;SPAN&gt;as &lt;/SPAN&gt;&lt;SPAN&gt;tmp&lt;/SPAN&gt;:&lt;BR /&gt;            &lt;SPAN&gt;tmp_path &lt;/SPAN&gt;= &lt;SPAN&gt;tmp&lt;/SPAN&gt;.name&lt;BR /&gt;            &lt;SPAN&gt;logger&lt;/SPAN&gt;.debug(&lt;SPAN&gt;f"Downloading &lt;/SPAN&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;SPAN&gt;file_name &lt;/SPAN&gt;&lt;SPAN&gt;or &lt;/SPAN&gt;&lt;SPAN&gt;file_id&lt;/SPAN&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN&gt; to &lt;/SPAN&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;SPAN&gt;tmp_path&lt;/SPAN&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN&gt;"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;            &lt;SPAN&gt;headers &lt;/SPAN&gt;= {&lt;SPAN&gt;"Authorization"&lt;/SPAN&gt;: &lt;SPAN&gt;f"Bearer &lt;/SPAN&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;SPAN&gt;access_token&lt;/SPAN&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN&gt;"&lt;/SPAN&gt;}&lt;BR /&gt;            &lt;SPAN&gt;with &lt;/SPAN&gt;requests.get(&lt;SPAN&gt;file_url&lt;/SPAN&gt;, &lt;SPAN&gt;headers&lt;/SPAN&gt;=&lt;SPAN&gt;headers&lt;/SPAN&gt;, &lt;SPAN&gt;stream&lt;/SPAN&gt;=&lt;SPAN&gt;True&lt;/SPAN&gt;, &lt;SPAN&gt;timeout&lt;/SPAN&gt;=&lt;SPAN&gt;20&lt;/SPAN&gt;) &lt;SPAN&gt;as &lt;/SPAN&gt;&lt;SPAN&gt;r&lt;/SPAN&gt;:&lt;BR /&gt;                &lt;SPAN&gt;r&lt;/SPAN&gt;.raise_for_status()&lt;BR /&gt;                &lt;SPAN&gt;with &lt;/SPAN&gt;&lt;SPAN&gt;open&lt;/SPAN&gt;(&lt;SPAN&gt;tmp_path&lt;/SPAN&gt;, &lt;SPAN&gt;"wb"&lt;/SPAN&gt;) &lt;SPAN&gt;as &lt;/SPAN&gt;&lt;SPAN&gt;f&lt;/SPAN&gt;:&lt;BR /&gt;                    &lt;SPAN&gt;for &lt;/SPAN&gt;&lt;SPAN&gt;chunk &lt;/SPAN&gt;&lt;SPAN&gt;in &lt;/SPAN&gt;&lt;SPAN&gt;r&lt;/SPAN&gt;.iter_content(&lt;SPAN&gt;chunk_size&lt;/SPAN&gt;=&lt;SPAN&gt;8192) :&lt;/SPAN&gt;&lt;BR /&gt;                        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;chunk&lt;/SPAN&gt;:&lt;BR /&gt;                            &lt;SPAN&gt;f&lt;/SPAN&gt;.write(&lt;SPAN&gt;chunk&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;logger&lt;/SPAN&gt;.info(&lt;SPAN&gt;f"Downloaded file &lt;/SPAN&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;SPAN&gt;file_name &lt;/SPAN&gt;&lt;SPAN&gt;or &lt;/SPAN&gt;&lt;SPAN&gt;file_id&lt;/SPAN&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN&gt; successfully."&lt;/SPAN&gt;)&lt;BR /&gt;        &lt;SPAN&gt;return &lt;/SPAN&gt;&lt;SPAN&gt;tmp_path&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;except &lt;/SPAN&gt;requests.exceptions.RequestException &lt;SPAN&gt;as &lt;/SPAN&gt;&lt;SPAN&gt;e&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;logger&lt;/SPAN&gt;.error(&lt;SPAN&gt;f"Error downloading HubSpot file &lt;/SPAN&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;SPAN&gt;file_id&lt;/SPAN&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN&gt;: &lt;/SPAN&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;SPAN&gt;str&lt;/SPAN&gt;(&lt;SPAN&gt;e&lt;/SPAN&gt;)&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN&gt;"&lt;/SPAN&gt;)&lt;BR /&gt;        &lt;SPAN&gt;return None&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;P&gt;&lt;BR /&gt;The problem I've encountered is that every time the code is executed, no matter which file ID is used, the downloaded file contains only the HTML of the HubSpot authorisation page.&lt;BR /&gt;How can I bypass or handle this authorisation page? Is there a better way to download email attachments via API?&lt;BR /&gt;Thanks to everyone in advance.&lt;/P&gt;</description>
      <pubDate>Fri, 22 Aug 2025 08:38:30 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/APIs-Integrations/How-to-download-email-attachments/m-p/1191953#M83928</guid>
      <dc:creator>G_Gorgiladze</dc:creator>
      <dc:date>2025-08-22T08:38:30Z</dc:date>
    </item>
    <item>
      <title>Re: How to download email attachments?</title>
      <link>https://community.hubspot.com/t5/APIs-Integrations/How-to-download-email-attachments/m-p/1192195#M83941</link>
      <description>&lt;P&gt;Hey, &lt;SPAN style="background: var(--ck-color-mention-background); color: var(--ck-color-mention-text);"&gt;&lt;a href="https://community.hubspot.com/t5/user/viewprofilepage/user-id/723475"&gt;@G_Gorgiladze&lt;/a&gt;&lt;/SPAN&gt; &lt;span class="lia-unicode-emoji" title=":waving_hand:"&gt;👋&lt;/span&gt; Have you tried using this endpoint to retrieve the attachments? &lt;A href="https://developers.hubspot.com/docs/reference/api/library/files#get-%2Ffiles%2Fv3%2Ffiles%2F%7Bfileid%7D%2Fsigned-url" target="_blank"&gt;&lt;STRONG&gt;Get signed URL to access private file&lt;/STRONG&gt;&lt;/A&gt;&lt;STRONG&gt; &lt;/STRONG&gt;Talk soon! — Jaycee&lt;/P&gt;</description>
      <pubDate>Fri, 22 Aug 2025 17:33:50 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/APIs-Integrations/How-to-download-email-attachments/m-p/1192195#M83941</guid>
      <dc:creator>Jaycee_Lewis</dc:creator>
      <dc:date>2025-08-22T17:33:50Z</dc:date>
    </item>
    <item>
      <title>Re: How to download email attachments?</title>
      <link>https://community.hubspot.com/t5/APIs-Integrations/How-to-download-email-attachments/m-p/1192717#M83972</link>
      <description>&lt;P&gt;Hello&amp;nbsp;&lt;a href="https://community.hubspot.com/t5/user/viewprofilepage/user-id/127074"&gt;@Jaycee_Lewis&lt;/a&gt;&amp;nbsp;,&lt;BR /&gt;The endpoint you provided was exactly what I needed.&lt;BR /&gt;I'm really grateful for your support.&lt;/P&gt;</description>
      <pubDate>Mon, 25 Aug 2025 09:09:20 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/APIs-Integrations/How-to-download-email-attachments/m-p/1192717#M83972</guid>
      <dc:creator>G_Gorgiladze</dc:creator>
      <dc:date>2025-08-25T09:09:20Z</dc:date>
    </item>
  </channel>
</rss>

