AZURE

Retrieving attachments from Exchange mailbox using python

&NewLine;<&excl;-- WP QUADS Content Ad Plugin v&period; 2&period;0&period;92 -->&NewLine;<div class&equals;"quads-location quads-ad2522 " id&equals;"quads-ad2522" style&equals;"float&colon;none&semi;margin&colon;0px 3px 3px 3px&semi;padding&colon;0px 0px 0px 0px&semi;" data-lazydelay&equals;"0">&NewLine;&NewLine;<&sol;div>&NewLine;&NewLine;<h2 class&equals;"wp-block-heading">Story&colon;<&sol;h2>&NewLine;&NewLine;&NewLine;&NewLine;<p>I got a request from a client who constantly gets CVs and have to download them for the hiring managers to review them and wanted to get some way an automated mechanism of downloading all those emails&period;<&sol;p>&NewLine;<&excl;-- WP QUADS Content Ad Plugin v&period; 2&period;0&period;92 -->&NewLine;<div class&equals;"quads-location quads-ad2524 " id&equals;"quads-ad2524" style&equals;"float&colon;none&semi;margin&colon;0px 3px 3px 3px&semi;padding&colon;0px 0px 0px 0px&semi;" data-lazydelay&equals;"0">&NewLine;&NewLine;<&sol;div>&NewLine;&NewLine;<&excl;-- WP QUADS Content Ad Plugin v&period; 2&period;0&period;92 -->&NewLine;<div class&equals;"quads-location quads-ad2529 " id&equals;"quads-ad2529" style&equals;"float&colon;none&semi;margin&colon;0px 3px 3px 3px&semi;padding&colon;0px 0px 0px 0px&semi;" data-lazydelay&equals;"0">&NewLine;&NewLine;<&sol;div>&NewLine;&NewLine;<&excl;-- WP QUADS Content Ad Plugin v&period; 2&period;0&period;92 -->&NewLine;<div class&equals;"quads-location quads-ad2531 " id&equals;"quads-ad2531" style&equals;"float&colon;none&semi;margin&colon;0px 3px 3px 3px&semi;padding&colon;0px 0px 0px 0px&semi;" data-lazydelay&equals;"0">&NewLine;&NewLine;<&sol;div>&NewLine;&NewLine;&NewLine;&NewLine;&NewLine;<p>Googling lead me to the exchangelib project which is a great python source for such a purpose&period; I built my local lab of the following servers to test it<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<ol class&equals;"wp-block-list" type&equals;"1"><li>AD 2016 moh10ly&period;local<&sol;li><li>Exchange 2016 &equals; exch01&period;moh10ly&period;local<&sol;li><li>AAD &equals; Another 2016 server to test from<&sol;li><&sol;ol>&NewLine;&NewLine;&NewLine;&NewLine;<p>I built my local Certification authority and made sure that all servers has the CA installed to avoid any issues on python&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p>If you are going to use this on your production environment you can basically install Python anywhere even on your own computer and it should work if EWS is exposed and Autodiscover is configured propely and have a valid and trusted 3rd party Certificate&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p>However&comma; If you would like to schedule this to work on a daily basis and let it download attachments from mailbox then you&&num;8217&semi;ll need a server or at least a computer to rely on that it would be on when the scheduled task works&period; <&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h2 class&equals;"wp-block-heading">Prerequisites &colon;<&sol;h2>&NewLine;&NewLine;&NewLine;&NewLine;<p>Windows Server 2016&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<ul class&equals;"wp-block-list"><li>Download and install latest version of Python 3&period;10<&sol;li><li>From CMD run the following cmd<ul><li>Pip install exchangelib<&sol;li><li>Pip install exchangelib&lbrack;kerberos&rsqb;<&sol;li><li>Pip install exchangelib&lbrack;sspi&rsqb;<&sol;li><&sol;ul><&sol;li><li>Download and install MIT Kerberos MSI from <a href&equals;"https&colon;&sol;&sol;web&period;mit&period;edu&sol;KERBEROS&sol;dist">https&colon;&sol;&sol;web&period;mit&period;edu&sol;KERBEROS&sol;dist<&sol;a> 64bit version<&sol;li><li>If you&&num;8217&semi;re doing this on a local Lab without a trusted 3rd certificate you&&num;8217&semi;ll need to make sure to export your certificatation Authority Certificate in CER format&comma; copy the cert and add it to the end of Python root PEM&period;<&sol;li><&sol;ul>&NewLine;&NewLine;&NewLine;&NewLine;<p><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h2 class&equals;"wp-block-heading">Testing Scenario<&sol;h2>&NewLine;&NewLine;&NewLine;&NewLine;<ul class&equals;"wp-block-list"><li>I created two mailboxes on my local Exchange server lab<&sol;li><li>I have sent myself an email to info&commat;moh10ly&period;com with 3 attachments in it as you can see&period;<&sol;li><li>Setup a server to use to download all attachments from the mailbox&period;<&sol;li><&sol;ul>&NewLine;&NewLine;&NewLine;&NewLine;<figure class&equals;"wp-block-image size-full"><img src&equals;"https&colon;&sol;&sol;www&period;moh10ly&period;com&sol;wp-content&sol;uploads&sol;2022&sol;01&sol;image&period;png" alt&equals;"" class&equals;"wp-image-10113"&sol;> &NewLine;&NewLine;<&excl;-- WP QUADS Content Ad Plugin v&period; 2&period;0&period;92 -->&NewLine;<div class&equals;"quads-location quads-ad2528 " id&equals;"quads-ad2528" style&equals;"float&colon;none&semi;margin&colon;0px 3px 3px 3px&semi;padding&colon;0px 0px 0px 0px&semi;" data-lazydelay&equals;"0">&NewLine;&NewLine;<&sol;div>&NewLine; &NewLine;<&sol;figure>&NewLine;&NewLine;&NewLine;&NewLine;<h2 class&equals;"wp-block-heading">Prepare your Python Script<&sol;h2>&NewLine;&NewLine;&NewLine;&NewLine;<ul class&equals;"wp-block-list"><li>Import Packages in order to use them&period; <&sol;li><&sol;ul>&NewLine;&NewLine;&NewLine;&NewLine;<p><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"EnlighterJSRAW" data-enlighter-language&equals;"generic" data-enlighter-theme&equals;"" data-enlighter-highlight&equals;"" data-enlighter-linenumbers&equals;"" data-enlighter-lineoffset&equals;"" data-enlighter-title&equals;"" data-enlighter-group&equals;"">from exchangelib import DELEGATE&comma; IMPERSONATION&comma; Account&comma; Credentials&comma; EWSDateTime&comma; EWSTimeZone&comma; Configuration&comma; NTLM&comma; GSSAPI&comma; CalendarItem&comma; Message&comma; Mailbox&comma; Attendee&comma; Q&comma; ExtendedProperty&comma; FileAttachment&comma; ItemAttachment&comma; HTMLBody&comma; Build&comma; Version&comma; FolderCollection&NewLine;<&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<ul class&equals;"wp-block-list"><li>Prepare Credentials of the user you would like to retrieve the attachments from&period; <&sol;li><&sol;ul>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"EnlighterJSRAW" data-enlighter-language&equals;"generic" data-enlighter-theme&equals;"" data-enlighter-highlight&equals;"" data-enlighter-linenumbers&equals;"" data-enlighter-lineoffset&equals;"" data-enlighter-title&equals;"" data-enlighter-group&equals;"">credentials &equals; Credentials&lpar;username&equals;'moh10ly&bsol;info'&comma; password&equals;'Bc12345&dollar;'&rpar;<&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<ul class&equals;"wp-block-list"><li>Enter your Exchange server configuration&period; Since autodiscover didn&&num;8217&semi;t work for me as I don&&num;8217&semi;t have a public certifiate so I went ahead and placed the server configuration&period;<&sol;li><&sol;ul>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"EnlighterJSRAW" data-enlighter-language&equals;"generic" data-enlighter-theme&equals;"" data-enlighter-highlight&equals;"" data-enlighter-linenumbers&equals;"" data-enlighter-lineoffset&equals;"" data-enlighter-title&equals;"" data-enlighter-group&equals;"">ews&lowbar;url &equals; 'https&colon;&sol;&sol;mail&period;moh10ly&period;com&sol;EWS&sol;exchange&period;asmx'&NewLine;ews&lowbar;auth&lowbar;type &equals; 'NTLM'&NewLine;primary&lowbar;smtp&lowbar;address &equals; 'info&commat;moh10ly&period;com'&NewLine;config &equals; Configuration&lpar;service&lowbar;endpoint&equals;ews&lowbar;url&comma; credentials&equals;credentials&comma; auth&lowbar;type&equals;ews&lowbar;auth&lowbar;type&rpar;<&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<ul class&equals;"wp-block-list"><li>Place the account type and configuration <&sol;li><&sol;ul>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"EnlighterJSRAW" data-enlighter-language&equals;"generic" data-enlighter-theme&equals;"" data-enlighter-highlight&equals;"" data-enlighter-linenumbers&equals;"" data-enlighter-lineoffset&equals;"" data-enlighter-title&equals;"" data-enlighter-group&equals;"">account &equals; Account&lpar;&NewLine;primary&lowbar;smtp&lowbar;address&equals;primary&lowbar;smtp&lowbar;address&comma;&NewLine;config&equals;config&comma; autodiscover&equals;False&comma;&NewLine;access&lowbar;type&equals;DELEGATE&rpar;<&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<ul class&equals;"wp-block-list"><li>Configure the local path of where you want to save attachments to on the server where this code is going to be launched from&period; in my code example I have created a folder called &&num;8220&semi;Temp&&num;8221&semi; on the C root drive and that&&num;8217&semi;s what I will use&period; <&sol;li><li>You can pickup a different local path by changing the &sol;temp path in the line &&num;8220&semi;local&lowbar;path &equals; os&period;path&period;join&lpar;&&num;8216&semi;<strong>&sol;temp<&sol;strong>&&num;8216&semi;&comma; attachment&period;name&rpar;&&num;8221&semi;<&sol;li><&sol;ul>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"EnlighterJSRAW" data-enlighter-language&equals;"generic" data-enlighter-theme&equals;"" data-enlighter-highlight&equals;"" data-enlighter-linenumbers&equals;"" data-enlighter-lineoffset&equals;"" data-enlighter-title&equals;"" data-enlighter-group&equals;"">import os&period;path&NewLine;from exchangelib import Account&comma; FileAttachment&comma; ItemAttachment&comma; Message&NewLine;&NewLine;some&lowbar;folder &equals; account&period;inbox &NewLine;for item in some&lowbar;folder&period;all&lpar;&rpar;&colon;&NewLine; for attachment in item&period;attachments&colon;&NewLine; if isinstance&lpar;attachment&comma; FileAttachment&rpar;&colon;&NewLine; local&lowbar;path &equals; os&period;path&period;join&lpar;'&sol;temp'&comma; attachment&period;name&rpar;&NewLine; with open&lpar;local&lowbar;path&comma; 'wb'&rpar; as f&colon;&NewLine; f&period;write&lpar;attachment&period;content&rpar;&NewLine;<&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p>This by now should be working fine and you should see that it is saving all your mailbox attachments to the folder that you have configured in the path section of the code&period;<&sol;p>&NewLine;<&excl;-- WP QUADS Content Ad Plugin v&period; 2&period;0&period;92 -->&NewLine;<div class&equals;"quads-location quads-ad2523 " id&equals;"quads-ad2523" style&equals;"float&colon;none&semi;margin&colon;0px 3px 3px 3px&semi;padding&colon;0px 0px 0px 0px&semi;" data-lazydelay&equals;"0">&NewLine;&NewLine;<&sol;div>&NewLine;&NewLine;&NewLine;&NewLine;&NewLine;<p><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<figure class&equals;"wp-block-image size-full"><img src&equals;"https&colon;&sol;&sol;www&period;moh10ly&period;com&sol;wp-content&sol;uploads&sol;2022&sol;01&sol;image-1&period;png" alt&equals;"" class&equals;"wp-image-10114"&sol;><&sol;figure>&NewLine;&NewLine;&NewLine;&NewLine;<p><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h2 class&equals;"wp-block-heading">Complete code to run<&sol;h2>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"EnlighterJSRAW" data-enlighter-language&equals;"generic" data-enlighter-theme&equals;"" data-enlighter-highlight&equals;"" data-enlighter-linenumbers&equals;"" data-enlighter-lineoffset&equals;"" data-enlighter-title&equals;"" data-enlighter-group&equals;"">Working config&NewLine;&NewLine;&NewLine;from exchangelib import DELEGATE&comma; IMPERSONATION&comma; Account&comma; Credentials&comma; EWSDateTime&comma; EWSTimeZone&comma; Configuration&comma; NTLM&comma; GSSAPI&comma; CalendarItem&comma; Message&comma; Mailbox&comma; Attendee&comma; Q&comma; ExtendedProperty&comma; FileAttachment&comma; ItemAttachment&comma; HTMLBody&comma; Build&comma; Version&comma; FolderCollection&NewLine;&NewLine;&NewLine;credentials &equals; Credentials&lpar;username&equals;'moh10ly&bsol;info'&comma; password&equals;'Bc12345&dollar;'&rpar;&NewLine;&NewLine;ews&lowbar;url &equals; 'https&colon;&sol;&sol;mail&period;moh10ly&period;com&sol;EWS&sol;exchange&period;asmx'&NewLine;ews&lowbar;auth&lowbar;type &equals; 'NTLM'&NewLine;primary&lowbar;smtp&lowbar;address &equals; 'info&commat;moh10ly&period;com'&NewLine;config &equals; Configuration&lpar;service&lowbar;endpoint&equals;ews&lowbar;url&comma; credentials&equals;credentials&comma; auth&lowbar;type&equals;ews&lowbar;auth&lowbar;type&rpar;&NewLine;&NewLine;&NewLine;account &equals; Account&lpar;&NewLine;primary&lowbar;smtp&lowbar;address&equals;primary&lowbar;smtp&lowbar;address&comma;&NewLine;config&equals;config&comma; autodiscover&equals;False&comma;&NewLine;access&lowbar;type&equals;DELEGATE&rpar;&NewLine;&NewLine;import os&period;path&NewLine;from exchangelib import Account&comma; FileAttachment&comma; ItemAttachment&comma; Message&NewLine;&NewLine;some&lowbar;folder &equals; account&period;inbox &NewLine;for item in some&lowbar;folder&period;all&lpar;&rpar;&colon;&NewLine; for attachment in item&period;attachments&colon;&NewLine; if isinstance&lpar;attachment&comma; FileAttachment&rpar;&colon;&NewLine; local&lowbar;path &equals; os&period;path&period;join&lpar;'&sol;temp'&comma; attachment&period;name&rpar;&NewLine; with open&lpar;local&lowbar;path&comma; 'wb'&rpar; as f&colon;&NewLine; f&period;write&lpar;attachment&period;content&rpar;&NewLine;&NewLine;&NewLine;-----------------&NewLine;&NewLine;&num;To download all attachments in the inbox&colon;&NewLine;&NewLine;for item in account&period;inbox&period;all&lpar;&rpar;&colon;&NewLine; for attachment in item&period;attachments&colon;&NewLine; if isinstance&lpar;attachment&comma; FileAttachment&rpar;&colon;&NewLine; local&lowbar;path &equals; os&period;path&period;join&lpar;'&sol;sky'&comma; attachment&period;name&rpar;&NewLine; with open&lpar;local&lowbar;path&comma; 'wb'&rpar; as f&comma; attachment&period;fp as fp&colon;&NewLine; buffer &equals; fp&period;read&lpar;1024&rpar;&NewLine; while buffer&colon;&NewLine; f&period;write&lpar;buffer&rpar;&NewLine; buffer &equals; fp&period;read&lpar;1024&rpar;&NewLine; print&lpar;'Saved attachment to'&comma; local&lowbar;path&rpar;&NewLine;&NewLine;<&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p>Hope this have helped you<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h2 class&equals;"wp-block-heading">References&colon;<&sol;h2>&NewLine;&NewLine;&NewLine;&NewLine;<p><a href&equals;"https&colon;&sol;&sol;towardsdatascience&period;com&sol;download-email-attachment-from-microsoft-exchange-web-services-automatically-9e20770f90ea">https&colon;&sol;&sol;towardsdatascience&period;com&sol;download-email-attachment-from-microsoft-exchange-web-services-automatically-9e20770f90ea<&sol;a><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h2 class&equals;"wp-block-heading">Check under attachments&colon;<&sol;h2>&NewLine;&NewLine;&NewLine;&NewLine;<p><a href&equals;"https&colon;&sol;&sol;ecederstrand&period;github&period;io&sol;exchangelib&sol;">https&colon;&sol;&sol;ecederstrand&period;github&period;io&sol;exchangelib&sol;<&sol;a><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p><a href&equals;"https&colon;&sol;&sol;pypi&period;org&sol;project&sol;exchangelib&sol;">https&colon;&sol;&sol;pypi&period;org&sol;project&sol;exchangelib&sol;<&sol;a><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<figure class&equals;"wp-block-embed is-type-wp-embed is-provider-activestate wp-block-embed-activestate"><div class&equals;"wp-block-embed&lowbar;&lowbar;wrapper">&NewLine;https&colon;&sol;&sol;www&period;activestate&period;com&sol;resources&sol;quick-reads&sol;how-to-install-and-use-exchangelib-python&sol;&NewLine;<&sol;div><&sol;figure>&NewLine;&NewLine;&NewLine;&NewLine;<h2 class&equals;"wp-block-heading">Troubleshoot cert issue<&sol;h2>&NewLine;&NewLine;&NewLine;&NewLine;<p><a href&equals;"https&colon;&sol;&sol;stackoverflow&period;com&sol;questions&sol;51925384&sol;unable-to-get-local-issuer-certificate-when-using-requests-in-python">https&colon;&sol;&sol;stackoverflow&period;com&sol;questions&sol;51925384&sol;unable-to-get-local-issuer-certificate-when-using-requests-in-python<&sol;a><&sol;p>&NewLine;<&excl;-- WP QUADS Content Ad Plugin v&period; 2&period;0&period;92 -->&NewLine;<div class&equals;"quads-location quads-ad2525 " id&equals;"quads-ad2525" style&equals;"float&colon;none&semi;margin&colon;0px 3px 3px 3px&semi;padding&colon;0px 0px 0px 0px&semi;" data-lazydelay&equals;"0">&NewLine;&NewLine;<&sol;div>&NewLine;&NewLine;&NewLine;&NewLine;&NewLine;<h2 class&equals;"wp-block-heading">With graph<&sol;h2>&NewLine;&NewLine;&NewLine;&NewLine;<p><a href&equals;"https&colon;&sol;&sol;techcommunity&period;microsoft&period;com&sol;t5&sol;identity-authentication&sol;what-oauth-permissions-needed-for-exchangelib&sol;m-p&sol;2858179">https&colon;&sol;&sol;techcommunity&period;microsoft&period;com&sol;t5&sol;identity-authentication&sol;what-oauth-permissions-needed-for-exchangelib&sol;m-p&sol;2858179<&sol;a><&sol;p>&NewLine;&NewLine;<&excl;-- WP QUADS Content Ad Plugin v&period; 2&period;0&period;92 -->&NewLine;<div class&equals;"quads-location quads-ad2526 " id&equals;"quads-ad2526" style&equals;"float&colon;none&semi;margin&colon;0px 3px 3px 3px&semi;padding&colon;0px 0px 0px 0px&semi;" data-lazydelay&equals;"0">&NewLine;&NewLine;<&sol;div>&NewLine;&NewLine;

moh10ly

View Comments

  • In your example, you are able to save all attachments that are FileAttachment types. I'm running into an issue where some of my attachments are ItemAttachment types. It doesn't understand "f.write(attachment.content)".

    How would you be able to save the ItemAttachment?

Recent Posts

Reset passwords for Active Directory Users

Reset and manage your Active Directory users' Passwords Active Directory is one of the most…

3 years ago

Finding Exchange Database hidden mailboxes. ​

Finding Exchange Database hidden mailboxes. Story:Maybe you have been in this situation before, trying to…

3 years ago

Setting up ADConnect and PTA (Password auth through) servers agents behind proxy

If you're using a Proxy server in your firewall or in your network and have…

3 years ago

Get Report of Active Directory Locked Accounts and Machine they logged in from

Story:I got some clients  that have reported some of their users being locked out and…

3 years ago

Checking and Providing Full and SendAs delegate access on O365 Exchange Online

Delegate Permissions This is a code that I have wrote recently to check if an…

3 years ago

550 relay not permitted distribution group contact

550 relay not permitted distribution group contact Symptoms When trying to add an external contact…

4 years ago

Warning: Undefined array key "adsense_ad_type" in /www/wwwroot/www.moh10ly.com/wp-content/plugins/quick-adsense-reloaded/includes/amp-condition-display.php on line 298

Warning: Undefined array key "adsense_ad_type" in /www/wwwroot/www.moh10ly.com/wp-content/plugins/quick-adsense-reloaded/includes/amp-condition-display.php on line 298

Warning: Undefined array key "adsense_ad_type" in /www/wwwroot/www.moh10ly.com/wp-content/plugins/quick-adsense-reloaded/includes/amp-condition-display.php on line 298

Warning: Undefined array key "adsense_ad_type" in /www/wwwroot/www.moh10ly.com/wp-content/plugins/quick-adsense-reloaded/includes/amp-condition-display.php on line 298

Warning: Undefined array key "adsense_ad_type" in /www/wwwroot/www.moh10ly.com/wp-content/plugins/quick-adsense-reloaded/includes/amp-condition-display.php on line 298

Warning: Undefined array key "adsense_ad_type" in /www/wwwroot/www.moh10ly.com/wp-content/plugins/quick-adsense-reloaded/includes/amp-condition-display.php on line 298

Warning: Undefined array key "adsense_ad_type" in /www/wwwroot/www.moh10ly.com/wp-content/plugins/quick-adsense-reloaded/includes/amp-condition-display.php on line 298

Warning: Undefined array key "adsense_ad_type" in /www/wwwroot/www.moh10ly.com/wp-content/plugins/quick-adsense-reloaded/includes/amp-condition-display.php on line 298

Warning: Undefined array key "adsense_ad_type" in /www/wwwroot/www.moh10ly.com/wp-content/plugins/quick-adsense-reloaded/includes/amp-condition-display.php on line 298

Warning: Undefined array key "adsense_ad_type" in /www/wwwroot/www.moh10ly.com/wp-content/plugins/quick-adsense-reloaded/includes/amp-condition-display.php on line 298

Warning: Undefined array key "adsense_ad_type" in /www/wwwroot/www.moh10ly.com/wp-content/plugins/quick-adsense-reloaded/includes/amp-condition-display.php on line 298

Warning: Undefined array key "adsense_ad_type" in /www/wwwroot/www.moh10ly.com/wp-content/plugins/quick-adsense-reloaded/includes/amp-condition-display.php on line 298

Warning: Undefined array key "adsense_ad_type" in /www/wwwroot/www.moh10ly.com/wp-content/plugins/quick-adsense-reloaded/includes/amp-condition-display.php on line 298

Warning: Undefined array key "adsense_ad_type" in /www/wwwroot/www.moh10ly.com/wp-content/plugins/quick-adsense-reloaded/includes/amp-condition-display.php on line 298

Warning: Undefined array key "adsense_ad_type" in /www/wwwroot/www.moh10ly.com/wp-content/plugins/quick-adsense-reloaded/includes/amp-condition-display.php on line 298

Warning: Undefined array key "adsense_ad_type" in /www/wwwroot/www.moh10ly.com/wp-content/plugins/quick-adsense-reloaded/includes/amp-condition-display.php on line 298

Warning: Undefined array key "adsense_ad_type" in /www/wwwroot/www.moh10ly.com/wp-content/plugins/quick-adsense-reloaded/includes/amp-condition-display.php on line 298

Warning: Undefined array key "adsense_ad_type" in /www/wwwroot/www.moh10ly.com/wp-content/plugins/quick-adsense-reloaded/includes/amp-condition-display.php on line 298