{"id":20895,"date":"2026-09-15T05:31:35","date_gmt":"2026-09-15T05:31:35","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/python-tutorial-imgpage-25-mb-fotos-hochladen\/"},"modified":"2026-09-15T05:31:35","modified_gmt":"2026-09-15T05:31:35","slug":"python-tutorial-imgpage-25-mb-fotos-hochladen","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/de\/blog\/email\/python-tutorial-imgpage-25-mb-fotos-hochladen\/","title":{"rendered":"Python-Tutorial: Mit ImgPage 25 MB gro\u00dfe Fotos per E-Mail in S3 und Cloud Files hochladen"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><i>Dieser Beitrag stammt von Paul Finn. Paul ist Python-Entwickler, Unternehmer mit Sitz in Portsmouth, NH (<\/i><a href=\"http:\/\/route3software.com\/\" target=\"_tabs\" rel=\"noopener noreferrer\"><i>http:\/\/route3software.com\/<\/i><\/a><i>) und Bierliebhaber (https:\/\/hoppypress.com\/beer-art). Folgen Sie seinem Blog unter\u00a0<\/i><a href=\"http:\/\/www.pfinn.net\/\" target=\"_tabs\" rel=\"noopener noreferrer\"><i>http:\/\/www.pfinn.net\/<\/i><\/a><i>, seinen Tweets unter\u00a0<\/i><a href=\"https:\/\/twitter.com\/paul_finn_\" target=\"_tabs\" rel=\"noopener noreferrer\"><i>@paulfinn<\/i><\/a><i>\u00a0und seinem Code unter\u00a0<\/i><a href=\"https:\/\/github.com\/pfinn\" target=\"_tabs\" rel=\"noopener noreferrer\"><i>https:\/\/github.com\/pfinn<\/i><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Meine liebsten Webentwicklungsprojekte beinhalten immer die Erstellung eines Tools rund um eine neu entdeckte API, und ich bin schon seit einiger Zeit ein gro\u00dfer Fan von Mailgun. Ihre API \u00fcbernimmt nicht nur eine der schwierigsten Aufgaben \u00fcberhaupt\u00a0\u2013 das Parsing von E-Mails\u00a0\u2013, sie erledigt dies auch noch hervorragend. Sie ist ein herausragendes Beispiel daf\u00fcr, wie eine moderne, entwicklerfreundliche API aussehen sollte: Sie ist RESTful, l\u00f6st ein echtes Problem, verf\u00fcgt \u00fcber eine solide Dokumentation und erm\u00f6glicht einen schnellen Einstieg.<\/p>\n\n\n\r\n    <nav data-content-type=\"longform\" class=\"toc-block longform-spacings px-5 py-6 px-md-6 px-lg-7 py-md-7 bg-light fs-sm rounded-lg\" aria-labelledby=\"toc-title-3882\"><p class=\"h5 m-0\" id=\"toc-title-3882\">Inhaltsverzeichnis<\/p><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">01<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#erstellung-einer-benutzerfreundlichen-app-fuer-den-bilder-upload-und-das-hosting\">Erstellung einer benutzerfreundlichen App f\u00fcr den Bilder-Upload und das Hosting<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">02<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#parsing-eingehender-e-mails-mit-der-mailgun-routes-api\">Parsing eingehender E-Mails mit der Mailgun Routes API<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">03<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#upload-von-fotos-in-rackspace-cloud-files-und-amazon-s3\">Upload von Fotos in Rackspace Cloud Files und Amazon S3<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">04<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#fazit\">Fazit<\/a><\/div><\/div><\/nav>\n\n\n<h2 class=\"wp-block-heading\">Erstellung einer benutzerfreundlichen App f\u00fcr den Bilder-Upload und das Hosting<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ich habe mich vor einigen Wochen an Mailgun gewandt, als ich beschloss, einen schnellen Image-Host zu entwickeln, der Bilder per E-Mail empf\u00e4ngt und nicht auf den traditionellen Upload-Prozess auf Client-Seite angewiesen ist. Viele aktuelle Smartphones bieten keinen nativen Support f\u00fcr Uploads im Browser. Daher ist es manchmal etwas knifflig, Fotos vom Smartphone zu \u00fcbertragen und sie nur mit einem Link (und unter Umgehung von sozialen Netzwerken) zu teilen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ich habe ImgPage (\u201eImage Page\u201c) entwickelt, um dieses Problem zu l\u00f6sen: H\u00e4ngen Sie einfach ein oder mehrere Fotos an eine E-Mail an und senden Sie diese an inbox@imgpage.com. Warten Sie ein paar Sekunden, und Sie erhalten eine E-Mail-Antwort von ImgPage mit einem individuellen Link zu einer sauberen, \u00fcbersichtlichen Seite, auf der nur Ihre Bilder zu sehen sind (siehe unten).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nachfolgend zeige ich Ihnen anhand eines vereinfachten Beispiel-Codes, wie ImgPage Mailgun nutzt, um diese Bilder in die Cloud hochzuladen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Parsing eingehender E-Mails mit der Mailgun Routes API<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nach der Erstellung eines Git-Repositorys f\u00fcr ImgPage bestand der n\u00e4chste Schritt in der Einrichtung der Adresse inbox@imgpage.com\u00a0<a href=\"https:\/\/documentation.mailgun.com\/en\/latest\/user_manual.html\" target=\"_tabs\" rel=\"noopener noreferrer\">Route<\/a> innerhalb von Mailgun. Eine Route ist bei Mailgun die Logik, die dem System mitteilt, was mit jeder eingehenden E-Mail geschehen soll. F\u00fcr ImgPage habe ich Mailgun so konfiguriert, dass jede eingehende E-Mail an inbox@imgpage.com geparst und die Details per POST an meinen Server gesendet werden.<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                        requests.post(&quot;https:\/\/api.mailgun.net\/v2\/routes&quot;, \r\n    auth=(&quot;api&quot;, os.environ.get(&quot;MAILGUN_KEY&quot;, &quot;your-api-key&quot;))), \r\n    data=MultiDict([(&quot;description&quot;, &quot;ImgPage Inbox Processing&quot;), \r\n                    (&quot;expression&quot;, &quot;match_recipient(&#039;inbox@imgpage.com&#039;)&quot;), \r\n                    (&quot;action&quot;, &quot;forward(&#039;http:\/\/imgpage.com\/mailgun-endpoint\/&#039;)&quot;), \r\n                    (&quot;action&quot;, &quot;stop()&quot;)\r\n                  ]))\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Ein smarter Trick bei Mailgun: Sie sind nicht nur auf den Abgleich von E-Mail-Empf\u00e4ngern beschr\u00e4nkt. Zudem lassen sich E-Mail-Kopfzeilen wie die Betreffzeile abgleichen und regul\u00e4re Ausdr\u00fccke nutzen. Routen lassen sich, wie oben gezeigt, programmgesteuert erstellen. Alternativ k\u00f6nnen Sie diese nach dem Login \u00fcber das Mailgun-Dashboard einrichten. Hier finden Sie die vollst\u00e4ndigen\u00a0<a href=\"https:\/\/documentation.mailgun.com\/en\/latest\/user_manual.html\" target=\"_tabs\" rel=\"noopener noreferrer\">API-Spezifikationen f\u00fcr das Parsing eingehender E-Mails<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bei den Anh\u00e4ngen nimmt uns Mailgun die meiste Arbeit ab und sendet uns per POST die ben\u00f6tigten Informationen zu allen Anh\u00e4ngen bis zu 25 MB (eigentlich liegt die Maximalgr\u00f6\u00dfe 1 oder 2 KB unter 25 MB, da Platz f\u00fcr E-Mail-Kopfzeilen reserviert werden muss). In diesem vereinfachten Beispiel pr\u00fcfe ich die Anfrage, um sicherzustellen, dass mindestens ein Anhang vorhanden ist und dieser eine g\u00e4ngige Foto-Dateierweiterung aufweist, die wir erwarten (falls nicht, wird ein HTTP 415-Fehler zur\u00fcckgegeben).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">@app.route(\u2018\/mailgun-endpoint\u2019, methods=[\u2018POST\u2019]) def mailgun_endpoint(): if(len(request.files) &gt; 0): for attachment in request.files.values(): file_name, file_extension = os.path.splitext(attachment.filename) if file_extension.lower() not in [\u2018.jpg\u2019, \u2018.gif\u2019, \u2018.png\u2019, \u2018.bmp\u2019]: abort(415) #Unsupported Media Type<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                        @app.route(&#039;\/mailgun-endpoint&#039;, methods=[&#039;POST&#039;])\r\n    def mailgun_endpoint(): \r\n      if(len(request.files) &gt; 0): \r\n         for attachment in request.files.values(): \r\n           file_name, file_extension = os.path.splitext(attachment.filename) \r\n           if file_extension.lower() not in [&#039;.jpg&#039;, &#039;.gif&#039;, &#039;.png&#039;, &#039;.bmp&#039;]: \r\n             abort(415) #Unsupported Media Type\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<h2 class=\"wp-block-heading\">Upload von Fotos in Rackspace Cloud Files und Amazon S3<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nun hatte ich einige Optionen f\u00fcr zuverl\u00e4ssigen Cloud-Speicher, wobei Amazon S3 die beliebteste ist. Ich probiere immer gerne neue Dienste aus und lerne neue APIs kennen. Daher beschloss ich, auch Rackspace Cloud Files eine Chance zu geben (Rackspace hat k\u00fcrzlich Mailgun \u00fcbernommen, sodass im Laufe der Zeit wahrscheinlich einige native Integrationen entwickelt werden). Ich hatte bereits viel Erfahrung mit S3 und war angenehm \u00fcberrascht, wie einfach der Einstieg in Cloud Files war. Die grundlegenden Konzepte wie Container und Buckets sind sich bei beiden Diensten sehr \u00e4hnlich.<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                    image_attachment.public_uri() \r\n    &#039;http:\/\/c1234.cdn.cloudfiles.rackspacecloud.com\/6a8f43...ab3cb7.jpg&#039;\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Im Fall von ImgPage ist es wichtig, dass alles innerhalb des Bilder-Containers \u00fcber eine eindeutige URL \u00f6ffentlich erreichbar ist. Nach dem Upload fordern Sie die \u00f6ffentliche URI von Cloud Files an.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wie Sie sehen, ist die Arbeit mit Cloud Files einfach und unkompliziert. Wenn Sie bei Amazon S3 bleiben m\u00f6chten, k\u00f6nnen Sie den Upload der Anh\u00e4nge mithilfe der Python-Bibliothek boto wie folgt abwickeln.<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                    from boto.s3.key import Key \r\nfrom boto.s3.connection import S3Connection \r\n\r\nconn = S3Connection(my-access-key, my-secret-key) \r\nbucket = conn.get_bucket(&#039;images&#039;) \r\nkey = Key(bucket) \r\nkey = (&#039;%s%s&#039;) % (str(uuid.uuid4()), file_extension) \r\nkey.set_contents_from_filename(attachment.filename)\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">(Wenn Sie die POST-Anfrage verarbeitet haben, erwartet Mailgun eine HTTP-Antwort 200 OK. Andernfalls wird diese Aktion in Ihren Mailgun-Protokollen als Fehler verzeichnet.)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Das Routing eingehender E-Mails und das Parsing von Anh\u00e4ngen ist mit Mailgun ein Kinderspiel. Ich konnte Mailguns Aktionen f\u00fcr den Empf\u00e4nger-Abgleich und die Weiterleitung sowohl mit Cloud Files als auch mit Amazon S3 kombinieren, um ImgPage zu erstellen. Ohne Mailgun h\u00e4tte ich dieses Projekt aufgrund der Schwierigkeiten beim Parsing eingehender E-Mails wahrscheinlich gar nicht erst in Angriff genommen. Mailgun bekommt von mir beide Daumen nach oben f\u00fcr die L\u00f6sung eines schwierigen Problems und die Bereitstellung einer stabilen und gut dokumentierten API.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dieser Beitrag stammt von Paul Finn. Paul ist Python-Entwickler, Unternehmer (http:\/\/route3software.com\/) und Bierliebhaber (https:\/\/hoppypress.com\/beer-art) mit Sitz in Portsmouth, NH. Folgen Sie seinem Blog unter http:\/\/www.pfinn.net\/, seinen Tweets unter @paulfinn und seinem Code unter https:\/\/github.com\/pfinn<\/p>\n","protected":false},"author":13,"featured_media":4074,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[20],"class_list":["post-20895","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog_category-email"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Python-Tutorial: Mit ImgPage 25 MB gro\u00dfe Fotos per E-Mail in S3 und Cloud Files hochladen - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"Meine liebsten Webentwicklungsprojekte beinhalten immer die Erstellung eines Tools rund um eine neu entdeckte API, und ich bin schon seit einiger Zeit ein gro\u00dfer Fan von Mailgun.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mailgun.com\/de\/blog\/email\/python-tutorial-imgpage-25-mb-fotos-hochladen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python-Tutorial: Mit ImgPage 25 MB gro\u00dfe Fotos per E-Mail in S3 und Cloud Files hochladen - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"Meine liebsten Webentwicklungsprojekte beinhalten immer die Erstellung eines Tools rund um eine neu entdeckte API, und ich bin schon seit einiger Zeit ein gro\u00dfer Fan von Mailgun.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/de\/blog\/email\/python-tutorial-imgpage-25-mb-fotos-hochladen\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Email.png\" \/>\n\t<meta property=\"og:image:width\" content=\"720\" \/>\n\t<meta property=\"og:image:height\" content=\"448\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"4\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/email\\\/python-tutorial-imgpage-25-mb-fotos-hochladen\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/email\\\/python-tutorial-imgpage-25-mb-fotos-hochladen\\\/\",\"name\":\"Python-Tutorial: Mit ImgPage 25 MB gro\u00dfe Fotos per E-Mail in S3 und Cloud Files hochladen - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/email\\\/python-tutorial-imgpage-25-mb-fotos-hochladen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/email\\\/python-tutorial-imgpage-25-mb-fotos-hochladen\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Email.png\",\"datePublished\":\"2026-09-15T05:31:35+00:00\",\"description\":\"Meine liebsten Webentwicklungsprojekte beinhalten immer die Erstellung eines Tools rund um eine neu entdeckte API, und ich bin schon seit einiger Zeit ein gro\u00dfer Fan von Mailgun.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/email\\\/python-tutorial-imgpage-25-mb-fotos-hochladen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/email\\\/python-tutorial-imgpage-25-mb-fotos-hochladen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/email\\\/python-tutorial-imgpage-25-mb-fotos-hochladen\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Email.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Email.png\",\"width\":720,\"height\":448},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/email\\\/python-tutorial-imgpage-25-mb-fotos-hochladen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Python-Tutorial: Mit ImgPage 25 MB gro\u00dfe Fotos per E-Mail in S3 und Cloud Files hochladen\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Leistungsstarke Transaktions-E-Mail-APIs, mit denen Sie E-Mails senden, empfangen und nachverfolgen k\u00f6nnen, speziell f\u00fcr Entwickler konzipiert. Erfahren Sie noch heute mehr!\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"width\":512,\"height\":512,\"caption\":\"Transactional Email API Service For Developers | Mailgun\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Python-Tutorial: Mit ImgPage 25 MB gro\u00dfe Fotos per E-Mail in S3 und Cloud Files hochladen - Transactional Email API Service For Developers | Mailgun","description":"Meine liebsten Webentwicklungsprojekte beinhalten immer die Erstellung eines Tools rund um eine neu entdeckte API, und ich bin schon seit einiger Zeit ein gro\u00dfer Fan von Mailgun.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.mailgun.com\/de\/blog\/email\/python-tutorial-imgpage-25-mb-fotos-hochladen\/","og_locale":"de_DE","og_type":"article","og_title":"Python-Tutorial: Mit ImgPage 25 MB gro\u00dfe Fotos per E-Mail in S3 und Cloud Files hochladen - Transactional Email API Service For Developers | Mailgun","og_description":"Meine liebsten Webentwicklungsprojekte beinhalten immer die Erstellung eines Tools rund um eine neu entdeckte API, und ich bin schon seit einiger Zeit ein gro\u00dfer Fan von Mailgun.","og_url":"https:\/\/www.mailgun.com\/de\/blog\/email\/python-tutorial-imgpage-25-mb-fotos-hochladen\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","og_image":[{"width":720,"height":448,"url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Email.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"4\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mailgun.com\/de\/blog\/email\/python-tutorial-imgpage-25-mb-fotos-hochladen\/","url":"https:\/\/www.mailgun.com\/de\/blog\/email\/python-tutorial-imgpage-25-mb-fotos-hochladen\/","name":"Python-Tutorial: Mit ImgPage 25 MB gro\u00dfe Fotos per E-Mail in S3 und Cloud Files hochladen - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/de\/blog\/email\/python-tutorial-imgpage-25-mb-fotos-hochladen\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/de\/blog\/email\/python-tutorial-imgpage-25-mb-fotos-hochladen\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Email.png","datePublished":"2026-09-15T05:31:35+00:00","description":"Meine liebsten Webentwicklungsprojekte beinhalten immer die Erstellung eines Tools rund um eine neu entdeckte API, und ich bin schon seit einiger Zeit ein gro\u00dfer Fan von Mailgun.","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/de\/blog\/email\/python-tutorial-imgpage-25-mb-fotos-hochladen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/de\/blog\/email\/python-tutorial-imgpage-25-mb-fotos-hochladen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.mailgun.com\/de\/blog\/email\/python-tutorial-imgpage-25-mb-fotos-hochladen\/#primaryimage","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Email.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Email.png","width":720,"height":448},{"@type":"BreadcrumbList","@id":"https:\/\/www.mailgun.com\/de\/blog\/email\/python-tutorial-imgpage-25-mb-fotos-hochladen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/de\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/de\/blog\/"},{"@type":"ListItem","position":3,"name":"Python-Tutorial: Mit ImgPage 25 MB gro\u00dfe Fotos per E-Mail in S3 und Cloud Files hochladen"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/de\/#website","url":"https:\/\/www.mailgun.com\/de\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Leistungsstarke Transaktions-E-Mail-APIs, mit denen Sie E-Mails senden, empfangen und nachverfolgen k\u00f6nnen, speziell f\u00fcr Entwickler konzipiert. Erfahren Sie noch heute mehr!","publisher":{"@id":"https:\/\/www.mailgun.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/de\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.mailgun.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","width":512,"height":512,"caption":"Transactional Email API Service For Developers | Mailgun"},"image":{"@id":"https:\/\/www.mailgun.com\/de\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog\/20895","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/users\/13"}],"version-history":[{"count":0,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog\/20895\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/media\/4074"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/media?parent=20895"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog_category?post=20895"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}