PowerShell.PowerLibrary.Mail.psm1
#region Variables #region Mime Mappings $MimeMappings = New-Object System.Collections.Specialized.StringDictionary; $MimeMappings.Add('.323' , 'text/h323'); $MimeMappings.Add('.aaf' , 'application/octet-stream'); $MimeMappings.Add('.aca' , 'application/octet-stream'); $MimeMappings.Add('.accdb' , 'application/msaccess'); $MimeMappings.Add('.accde' , 'application/msaccess'); $MimeMappings.Add('.accdt' , 'application/msaccess'); $MimeMappings.Add('.acx' , 'application/internet-property-stream'); $MimeMappings.Add('.afm' , 'application/octet-stream'); $MimeMappings.Add('.ai' , 'application/postscript'); $MimeMappings.Add('.aif' , 'audio/x-aiff'); $MimeMappings.Add('.aifc' , 'audio/aiff'); $MimeMappings.Add('.aiff' , 'audio/aiff'); $MimeMappings.Add('.application' , 'application/x-ms-application'); $MimeMappings.Add('.art' , 'image/x-jg'); $MimeMappings.Add('.asd' , 'application/octet-stream'); $MimeMappings.Add('.asf' , 'video/x-ms-asf'); $MimeMappings.Add('.asi' , 'application/octet-stream'); $MimeMappings.Add('.asm' , 'text/plain'); $MimeMappings.Add('.asr' , 'video/x-ms-asf'); $MimeMappings.Add('.asx' , 'video/x-ms-asf'); $MimeMappings.Add('.atom' , 'application/atom+xml'); $MimeMappings.Add('.au' , 'audio/basic'); $MimeMappings.Add('.avi' , 'video/x-msvideo'); $MimeMappings.Add('.axs' , 'application/olescript'); $MimeMappings.Add('.bas' , 'text/plain'); $MimeMappings.Add('.bcpio' , 'application/x-bcpio'); $MimeMappings.Add('.bin' , 'application/octet-stream'); $MimeMappings.Add('.bmp' , 'image/bmp'); $MimeMappings.Add('.c' , 'text/plain'); $MimeMappings.Add('.cab' , 'application/octet-stream'); $MimeMappings.Add('.calx' , 'application/vnd.ms-office.calx'); $MimeMappings.Add('.cat' , 'application/vnd.ms-pki.seccat'); $MimeMappings.Add('.cdf' , 'application/x-cdf'); $MimeMappings.Add('.chm' , 'application/octet-stream'); $MimeMappings.Add('.class' , 'application/x-java-applet'); $MimeMappings.Add('.clp' , 'application/x-msclip'); $MimeMappings.Add('.cmx' , 'image/x-cmx'); $MimeMappings.Add('.cnf' , 'text/plain'); $MimeMappings.Add('.cod' , 'image/cis-cod'); $MimeMappings.Add('.cpio' , 'application/x-cpio'); $MimeMappings.Add('.cpp' , 'text/plain'); $MimeMappings.Add('.crd' , 'application/x-mscardfile'); $MimeMappings.Add('.crl' , 'application/pkix-crl'); $MimeMappings.Add('.crt' , 'application/x-x509-ca-cert'); $MimeMappings.Add('.csh' , 'application/x-csh'); $MimeMappings.Add('.css' , 'text/css'); $MimeMappings.Add('.csv' , 'application/octet-stream'); $MimeMappings.Add('.cur' , 'application/octet-stream'); $MimeMappings.Add('.dcr' , 'application/x-director'); $MimeMappings.Add('.deploy' , 'application/octet-stream'); $MimeMappings.Add('.der' , 'application/x-x509-ca-cert'); $MimeMappings.Add('.dib' , 'image/bmp'); $MimeMappings.Add('.dir' , 'application/x-director'); $MimeMappings.Add('.disco' , 'text/xml'); $MimeMappings.Add('.dll' , 'application/x-msdownload'); $MimeMappings.Add('.dll.config' , 'text/xml'); $MimeMappings.Add('.dlm' , 'text/dlm'); $MimeMappings.Add('.doc' , 'application/msword'); $MimeMappings.Add('.docm' , 'application/vnd.ms-word.document.macroEnabled.12'); $MimeMappings.Add('.docx' , 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'); $MimeMappings.Add('.dot' , 'application/msword'); $MimeMappings.Add('.dotm' , 'application/vnd.ms-word.template.macroEnabled.12'); $MimeMappings.Add('.dotx' , 'application/vnd.openxmlformats-officedocument.wordprocessingml.template'); $MimeMappings.Add('.dsp' , 'application/octet-stream'); $MimeMappings.Add('.dtd' , 'text/xml'); $MimeMappings.Add('.dvi' , 'application/x-dvi'); $MimeMappings.Add('.dwf' , 'drawing/x-dwf'); $MimeMappings.Add('.dwp' , 'application/octet-stream'); $MimeMappings.Add('.dxr' , 'application/x-director'); $MimeMappings.Add('.eml' , 'message/rfc822'); $MimeMappings.Add('.emz' , 'application/octet-stream'); $MimeMappings.Add('.eot' , 'application/octet-stream'); $MimeMappings.Add('.eps' , 'application/postscript'); $MimeMappings.Add('.etx' , 'text/x-setext'); $MimeMappings.Add('.evy' , 'application/envoy'); $MimeMappings.Add('.exe' , 'application/octet-stream'); $MimeMappings.Add('.exe.config' , 'text/xml'); $MimeMappings.Add('.fdf' , 'application/vnd.fdf'); $MimeMappings.Add('.fif' , 'application/fractals'); $MimeMappings.Add('.fla' , 'application/octet-stream'); $MimeMappings.Add('.flr' , 'x-world/x-vrml'); $MimeMappings.Add('.flv' , 'video/x-flv'); $MimeMappings.Add('.gif' , 'image/gif'); $MimeMappings.Add('.gtar' , 'application/x-gtar'); $MimeMappings.Add('.gz' , 'application/x-gzip'); $MimeMappings.Add('.h' , 'text/plain'); $MimeMappings.Add('.hdf' , 'application/x-hdf'); $MimeMappings.Add('.hdml' , 'text/x-hdml'); $MimeMappings.Add('.hhc' , 'application/x-oleobject'); $MimeMappings.Add('.hhk' , 'application/octet-stream'); $MimeMappings.Add('.hhp' , 'application/octet-stream'); $MimeMappings.Add('.hlp' , 'application/winhlp'); $MimeMappings.Add('.hqx' , 'application/mac-binhex40'); $MimeMappings.Add('.hta' , 'application/hta'); $MimeMappings.Add('.htc' , 'text/x-component'); $MimeMappings.Add('.htm' , 'text/html'); $MimeMappings.Add('.html' , 'text/html'); $MimeMappings.Add('.htt' , 'text/webviewhtml'); $MimeMappings.Add('.hxt' , 'text/html'); $MimeMappings.Add('.ico' , 'image/x-icon'); $MimeMappings.Add('.ics' , 'application/octet-stream'); $MimeMappings.Add('.ief' , 'image/ief'); $MimeMappings.Add('.iii' , 'application/x-iphone'); $MimeMappings.Add('.inf' , 'application/octet-stream'); $MimeMappings.Add('.ins' , 'application/x-internet-signup'); $MimeMappings.Add('.isp' , 'application/x-internet-signup'); $MimeMappings.Add('.IVF' , 'video/x-ivf'); $MimeMappings.Add('.jar' , 'application/java-archive'); $MimeMappings.Add('.java' , 'application/octet-stream'); $MimeMappings.Add('.jck' , 'application/liquidmotion'); $MimeMappings.Add('.jcz' , 'application/liquidmotion'); $MimeMappings.Add('.jfif' , 'image/pjpeg'); $MimeMappings.Add('.jpb' , 'application/octet-stream'); $MimeMappings.Add('.jpe' , 'image/jpeg'); $MimeMappings.Add('.jpeg' , 'image/jpeg'); $MimeMappings.Add('.jpg' , 'image/jpeg'); $MimeMappings.Add('.js' , 'application/x-javascript'); $MimeMappings.Add('.jsx' , 'text/jscript'); $MimeMappings.Add('.latex' , 'application/x-latex'); $MimeMappings.Add('.lit' , 'application/x-ms-reader'); $MimeMappings.Add('.lpk' , 'application/octet-stream'); $MimeMappings.Add('.lsf' , 'video/x-la-asf'); $MimeMappings.Add('.lsx' , 'video/x-la-asf'); $MimeMappings.Add('.lzh' , 'application/octet-stream'); $MimeMappings.Add('.m13' , 'application/x-msmediaview'); $MimeMappings.Add('.m14' , 'application/x-msmediaview'); $MimeMappings.Add('.m1v' , 'video/mpeg'); $MimeMappings.Add('.m3u' , 'audio/x-mpegurl'); $MimeMappings.Add('.man' , 'application/x-troff-man'); $MimeMappings.Add('.manifest' , 'application/x-ms-manifest'); $MimeMappings.Add('.map' , 'text/plain'); $MimeMappings.Add('.mdb' , 'application/x-msaccess'); $MimeMappings.Add('.mdp' , 'application/octet-stream'); $MimeMappings.Add('.me' , 'application/x-troff-me'); $MimeMappings.Add('.mht' , 'message/rfc822'); $MimeMappings.Add('.mhtml' , 'message/rfc822'); $MimeMappings.Add('.mid' , 'audio/mid'); $MimeMappings.Add('.midi' , 'audio/mid'); $MimeMappings.Add('.mix' , 'application/octet-stream'); $MimeMappings.Add('.mmf' , 'application/x-smaf'); $MimeMappings.Add('.mno' , 'text/xml'); $MimeMappings.Add('.mny' , 'application/x-msmoney'); $MimeMappings.Add('.mov' , 'video/quicktime'); $MimeMappings.Add('.movie' , 'video/x-sgi-movie'); $MimeMappings.Add('.mp2' , 'video/mpeg'); $MimeMappings.Add('.mp3' , 'audio/mpeg'); $MimeMappings.Add('.mpa' , 'video/mpeg'); $MimeMappings.Add('.mpe' , 'video/mpeg'); $MimeMappings.Add('.mpeg' , 'video/mpeg'); $MimeMappings.Add('.mpg' , 'video/mpeg'); $MimeMappings.Add('.mpp' , 'application/vnd.ms-project'); $MimeMappings.Add('.mpv2' , 'video/mpeg'); $MimeMappings.Add('.ms' , 'application/x-troff-ms'); $MimeMappings.Add('.msi' , 'application/octet-stream'); $MimeMappings.Add('.mso' , 'application/octet-stream'); $MimeMappings.Add('.mvb' , 'application/x-msmediaview'); $MimeMappings.Add('.mvc' , 'application/x-miva-compiled'); $MimeMappings.Add('.nc' , 'application/x-netcdf'); $MimeMappings.Add('.nsc' , 'video/x-ms-asf'); $MimeMappings.Add('.nws' , 'message/rfc822'); $MimeMappings.Add('.ocx' , 'application/octet-stream'); $MimeMappings.Add('.oda' , 'application/oda'); $MimeMappings.Add('.odc' , 'text/x-ms-odc'); $MimeMappings.Add('.ods' , 'application/oleobject'); $MimeMappings.Add('.one' , 'application/onenote'); $MimeMappings.Add('.onea' , 'application/onenote'); $MimeMappings.Add('.onetoc' , 'application/onenote'); $MimeMappings.Add('.onetoc2' , 'application/onenote'); $MimeMappings.Add('.onetmp' , 'application/onenote'); $MimeMappings.Add('.onepkg' , 'application/onenote'); $MimeMappings.Add('.osdx' , 'application/opensearchdescription+xml'); $MimeMappings.Add('.p10' , 'application/pkcs10'); $MimeMappings.Add('.p12' , 'application/x-pkcs12'); $MimeMappings.Add('.p7b' , 'application/x-pkcs7-certificates'); $MimeMappings.Add('.p7c' , 'application/pkcs7-mime'); $MimeMappings.Add('.p7m' , 'application/pkcs7-mime'); $MimeMappings.Add('.p7r' , 'application/x-pkcs7-certreqresp'); $MimeMappings.Add('.p7s' , 'application/pkcs7-signature'); $MimeMappings.Add('.pbm' , 'image/x-portable-bitmap'); $MimeMappings.Add('.pcx' , 'application/octet-stream'); $MimeMappings.Add('.pcz' , 'application/octet-stream'); $MimeMappings.Add('.pdf' , 'application/pdf'); $MimeMappings.Add('.pfb' , 'application/octet-stream'); $MimeMappings.Add('.pfm' , 'application/octet-stream'); $MimeMappings.Add('.pfx' , 'application/x-pkcs12'); $MimeMappings.Add('.pgm' , 'image/x-portable-graymap'); $MimeMappings.Add('.pko' , 'application/vnd.ms-pki.pko'); $MimeMappings.Add('.pma' , 'application/x-perfmon'); $MimeMappings.Add('.pmc' , 'application/x-perfmon'); $MimeMappings.Add('.pml' , 'application/x-perfmon'); $MimeMappings.Add('.pmr' , 'application/x-perfmon'); $MimeMappings.Add('.pmw' , 'application/x-perfmon'); $MimeMappings.Add('.png' , 'image/png'); $MimeMappings.Add('.pnm' , 'image/x-portable-anymap'); $MimeMappings.Add('.pnz' , 'image/png'); $MimeMappings.Add('.pot' , 'application/vnd.ms-powerpoint'); $MimeMappings.Add('.potm' , 'application/vnd.ms-powerpoint.template.macroEnabled.12'); $MimeMappings.Add('.potx' , 'application/vnd.openxmlformats-officedocument.presentationml.template'); $MimeMappings.Add('.ppam' , 'application/vnd.ms-powerpoint.addin.macroEnabled.12'); $MimeMappings.Add('.ppm' , 'image/x-portable-pixmap'); $MimeMappings.Add('.pps' , 'application/vnd.ms-powerpoint'); $MimeMappings.Add('.ppsm' , 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12'); $MimeMappings.Add('.ppsx' , 'application/vnd.openxmlformats-officedocument.presentationml.slideshow'); $MimeMappings.Add('.ppt' , 'application/vnd.ms-powerpoint'); $MimeMappings.Add('.pptm' , 'application/vnd.ms-powerpoint.presentation.macroEnabled.12'); $MimeMappings.Add('.pptx' , 'application/vnd.openxmlformats-officedocument.presentationml.presentation'); $MimeMappings.Add('.prf' , 'application/pics-rules'); $MimeMappings.Add('.prm' , 'application/octet-stream'); $MimeMappings.Add('.prx' , 'application/octet-stream'); $MimeMappings.Add('.ps' , 'application/postscript'); $MimeMappings.Add('.psd' , 'application/octet-stream'); $MimeMappings.Add('.psm' , 'application/octet-stream'); $MimeMappings.Add('.psp' , 'application/octet-stream'); $MimeMappings.Add('.pub' , 'application/x-mspublisher'); $MimeMappings.Add('.qt' , 'video/quicktime'); $MimeMappings.Add('.qtl' , 'application/x-quicktimeplayer'); $MimeMappings.Add('.qxd' , 'application/octet-stream'); $MimeMappings.Add('.ra' , 'audio/x-pn-realaudio'); $MimeMappings.Add('.ram' , 'audio/x-pn-realaudio'); $MimeMappings.Add('.rar' , 'application/octet-stream'); $MimeMappings.Add('.ras' , 'image/x-cmu-raster'); $MimeMappings.Add('.rf' , 'image/vnd.rn-realflash'); $MimeMappings.Add('.rgb' , 'image/x-rgb'); $MimeMappings.Add('.rm' , 'application/vnd.rn-realmedia'); $MimeMappings.Add('.rmi' , 'audio/mid'); $MimeMappings.Add('.roff' , 'application/x-troff'); $MimeMappings.Add('.rpm' , 'audio/x-pn-realaudio-plugin'); $MimeMappings.Add('.rtf' , 'application/rtf'); $MimeMappings.Add('.rtx' , 'text/richtext'); $MimeMappings.Add('.scd' , 'application/x-msschedule'); $MimeMappings.Add('.sct' , 'text/scriptlet'); $MimeMappings.Add('.sea' , 'application/octet-stream'); $MimeMappings.Add('.setpay' , 'application/set-payment-initiation'); $MimeMappings.Add('.setreg' , 'application/set-registration-initiation'); $MimeMappings.Add('.sgml' , 'text/sgml'); $MimeMappings.Add('.sh' , 'application/x-sh'); $MimeMappings.Add('.shar' , 'application/x-shar'); $MimeMappings.Add('.sit' , 'application/x-stuffit'); $MimeMappings.Add('.sldm' , 'application/vnd.ms-powerpoint.slide.macroEnabled.12'); $MimeMappings.Add('.sldx' , 'application/vnd.openxmlformats-officedocument.presentationml.slide'); $MimeMappings.Add('.smd' , 'audio/x-smd'); $MimeMappings.Add('.smi' , 'application/octet-stream'); $MimeMappings.Add('.smx' , 'audio/x-smd'); $MimeMappings.Add('.smz' , 'audio/x-smd'); $MimeMappings.Add('.snd' , 'audio/basic'); $MimeMappings.Add('.snp' , 'application/octet-stream'); $MimeMappings.Add('.spc' , 'application/x-pkcs7-certificates'); $MimeMappings.Add('.spl' , 'application/futuresplash'); $MimeMappings.Add('.src' , 'application/x-wais-source'); $MimeMappings.Add('.ssm' , 'application/streamingmedia'); $MimeMappings.Add('.sst' , 'application/vnd.ms-pki.certstore'); $MimeMappings.Add('.stl' , 'application/vnd.ms-pki.stl'); $MimeMappings.Add('.sv4cpio' , 'application/x-sv4cpio'); $MimeMappings.Add('.sv4crc' , 'application/x-sv4crc'); $MimeMappings.Add('.swf' , 'application/x-shockwave-flash'); $MimeMappings.Add('.t' , 'application/x-troff'); $MimeMappings.Add('.tar' , 'application/x-tar'); $MimeMappings.Add('.tcl' , 'application/x-tcl'); $MimeMappings.Add('.tex' , 'application/x-tex'); $MimeMappings.Add('.texi' , 'application/x-texinfo'); $MimeMappings.Add('.texinfo' , 'application/x-texinfo'); $MimeMappings.Add('.tgz' , 'application/x-compressed'); $MimeMappings.Add('.thmx' , 'application/vnd.ms-officetheme'); $MimeMappings.Add('.thn' , 'application/octet-stream'); $MimeMappings.Add('.tif' , 'image/tiff'); $MimeMappings.Add('.tiff' , 'image/tiff'); $MimeMappings.Add('.toc' , 'application/octet-stream'); $MimeMappings.Add('.tr' , 'application/x-troff'); $MimeMappings.Add('.trm' , 'application/x-msterminal'); $MimeMappings.Add('.tsv' , 'text/tab-separated-values'); $MimeMappings.Add('.ttf' , 'application/octet-stream'); $MimeMappings.Add('.txt' , 'text/plain'); $MimeMappings.Add('.u32' , 'application/octet-stream'); $MimeMappings.Add('.uls' , 'text/iuls'); $MimeMappings.Add('.ustar' , 'application/x-ustar'); $MimeMappings.Add('.vbs' , 'text/vbscript'); $MimeMappings.Add('.vcf' , 'text/x-vcard'); $MimeMappings.Add('.vcs' , 'text/plain'); $MimeMappings.Add('.vdx' , 'application/vnd.ms-visio.viewer'); $MimeMappings.Add('.vml' , 'text/xml'); $MimeMappings.Add('.vsd' , 'application/vnd.visio'); $MimeMappings.Add('.vss' , 'application/vnd.visio'); $MimeMappings.Add('.vst' , 'application/vnd.visio'); $MimeMappings.Add('.vsto' , 'application/x-ms-vsto'); $MimeMappings.Add('.vsw' , 'application/vnd.visio'); $MimeMappings.Add('.vsx' , 'application/vnd.visio'); $MimeMappings.Add('.vtx' , 'application/vnd.visio'); $MimeMappings.Add('.wav' , 'audio/wav'); $MimeMappings.Add('.wax' , 'audio/x-ms-wax'); $MimeMappings.Add('.wbmp' , 'image/vnd.wap.wbmp'); $MimeMappings.Add('.wcm' , 'application/vnd.ms-works'); $MimeMappings.Add('.wdb' , 'application/vnd.ms-works'); $MimeMappings.Add('.wks' , 'application/vnd.ms-works'); $MimeMappings.Add('.wm' , 'video/x-ms-wm'); $MimeMappings.Add('.wma' , 'audio/x-ms-wma'); $MimeMappings.Add('.wmd' , 'application/x-ms-wmd'); $MimeMappings.Add('.wmf' , 'application/x-msmetafile'); $MimeMappings.Add('.wml' , 'text/vnd.wap.wml'); $MimeMappings.Add('.wmlc' , 'application/vnd.wap.wmlc'); $MimeMappings.Add('.wmls' , 'text/vnd.wap.wmlscript'); $MimeMappings.Add('.wmlsc' , 'application/vnd.wap.wmlscriptc'); $MimeMappings.Add('.wmp' , 'video/x-ms-wmp'); $MimeMappings.Add('.wmv' , 'video/x-ms-wmv'); $MimeMappings.Add('.wmx' , 'video/x-ms-wmx'); $MimeMappings.Add('.wmz' , 'application/x-ms-wmz'); $MimeMappings.Add('.wps' , 'application/vnd.ms-works'); $MimeMappings.Add('.wri' , 'application/x-mswrite'); $MimeMappings.Add('.wrl' , 'x-world/x-vrml'); $MimeMappings.Add('.wrz' , 'x-world/x-vrml'); $MimeMappings.Add('.wsdl' , 'text/xml'); $MimeMappings.Add('.wvx' , 'video/x-ms-wvx'); $MimeMappings.Add('.x' , 'application/directx'); $MimeMappings.Add('.xaf' , 'x-world/x-vrml'); $MimeMappings.Add('.xaml' , 'application/xaml+xml'); $MimeMappings.Add('.xap' , 'application/x-silverlight-app'); $MimeMappings.Add('.xbap' , 'application/x-ms-xbap'); $MimeMappings.Add('.xbm' , 'image/x-xbitmap'); $MimeMappings.Add('.xdr' , 'text/plain'); $MimeMappings.Add('.xla' , 'application/vnd.ms-excel'); $MimeMappings.Add('.xlam' , 'application/vnd.ms-excel.addin.macroEnabled.12'); $MimeMappings.Add('.xlc' , 'application/vnd.ms-excel'); $MimeMappings.Add('.xlm' , 'application/vnd.ms-excel'); $MimeMappings.Add('.xls' , 'application/vnd.ms-excel'); $MimeMappings.Add('.xlsb' , 'application/vnd.ms-excel.sheet.binary.macroEnabled.12'); $MimeMappings.Add('.xlsm' , 'application/vnd.ms-excel.sheet.macroEnabled.12'); $MimeMappings.Add('.xlsx' , 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); $MimeMappings.Add('.xlt' , 'application/vnd.ms-excel'); $MimeMappings.Add('.xltm' , 'application/vnd.ms-excel.template.macroEnabled.12'); $MimeMappings.Add('.xltx' , 'application/vnd.openxmlformats-officedocument.spreadsheetml.template'); $MimeMappings.Add('.xlw' , 'application/vnd.ms-excel'); $MimeMappings.Add('.xml' , 'text/xml'); $MimeMappings.Add('.xof' , 'x-world/x-vrml'); $MimeMappings.Add('.xpm' , 'image/x-xpixmap'); $MimeMappings.Add('.xps' , 'application/vnd.ms-xpsdocument'); $MimeMappings.Add('.xsd' , 'text/xml'); $MimeMappings.Add('.xsf' , 'text/xml'); $MimeMappings.Add('.xsl' , 'text/xml'); $MimeMappings.Add('.xslt' , 'text/xml'); $MimeMappings.Add('.xsn' , 'application/octet-stream'); $MimeMappings.Add('.xtp' , 'application/octet-stream'); $MimeMappings.Add('.xwd' , 'image/x-xwindowdump'); $MimeMappings.Add('.z' , 'application/x-compress'); $MimeMappings.Add('.zip' , 'application/x-zip-compressed'); #endregion #endregion #region Functions #region Get File Content Type FUNCTION Get-FileContentType { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [string] $FileName ) $extension = [System.IO.Path]::GetExtension($FileName) $contentType = $MimeMappings[$extension] if ([string]::IsNullOrEmpty($contentType)) { return New-Object System.Net.Mime.ContentType } else { return New-Object System.Net.Mime.ContentType($contentType) } } #endregion #region Send Mail Message FUNCTION Send-MailMessageWithInlineAttachment { <# .Synopsis Same as Send-MailMessage yet with inline attachments support. .DESCRIPTION This Function Sends an Email supporting inline attachments feature where you may include images in the body. .PARAMETER Attachments This is an array of attachments paths. .PARAMETER InlineAttachments This is a hashtable used to declare the inline attachments. .PARAMETER Bcc Array of Mail Addresses defining the BCC .PARAMETER Cc Array of Mail Addresses defining the CC .PARAMETER Body Text defining email body. .PARAMETER BodyAsHtml Switch to flag if Email Body is HTML or plain text. .PARAMETER DeliveryNotificationOption Delivery notification options .PARAMETER From Mail Address to define the sender. .PARAMETER Subject Text to define the Subject. .PARAMETER Priority Option to set email Priority .PARAMETER SmtpServer This can be DNS record or IP. Example: smtp.gmail.com .PARAMETER To Array of Mail Addresses defining the To .PARAMETER Credential User name and password to claim and identify the user. .PARAMETER UseSsl Switch to Enable/Disable SSL. .PARAMETER Port Text to define the Port. .EXAMPLE $Password = ConvertTo-SecureString -String 'zgedokjgsbkqacok' -AsPlainText -Force; $UserName = 'smtp.ακλლε♪@gmail.com'; $Credentials = New-Object 'System.Management.Automation.PSCredential' -ArgumentList $UserName, $Password; $MailingList = @('a1@ακλლε♪.com', 'a2@ακλლε♪.com'); $Subject = "Test Email"; $Attachments = [Collections.HashTable]::new(); $Attachments.Add("BG", "D:\Pictures\background\524299323109990.jpg"); $Body = "<img alt'Deployment in Progress' src='cid:BG' />"; Send-MailMessageWithInlineAttachment ` -SmtpServer 'smtp.gmail.com' ` -Port 587 ` -UseSsl:$true ` -Credential $Credentials ` -From 'smtp.ακλლε♪@gmail.com' ` -To $MailingList ` -BodyAsHtml:$true ` -Subject $Subject ` -Body $Body ` -InlineAttachments $Attachments ` ; #> #region Parameters [CmdletBinding()] param ( [Parameter(ValueFromPipeline=$true)] [Alias('PsPath')] [ValidateNotNullOrEmpty()] [string[]] ${Attachments}, [ValidateNotNullOrEmpty()] [Collections.HashTable] ${InlineAttachments}, [ValidateNotNullOrEmpty()] [Net.Mail.MailAddress[]] ${Bcc}, [Parameter(Position=2)] [ValidateNotNullOrEmpty()] [string] ${Body}, [Alias('BAH')] [switch] ${BodyAsHtml}, [ValidateNotNullOrEmpty()] [Net.Mail.MailAddress[]] ${Cc}, [Alias('DNO')] [ValidateNotNullOrEmpty()] [Net.Mail.DeliveryNotificationOptions] ${DeliveryNotificationOption}, [Parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()] [Net.Mail.MailAddress] ${From}, [Parameter(Mandatory = $true, Position = 3)] [Alias('ComputerName')] [string] ${SmtpServer}, [ValidateNotNullOrEmpty()] [Net.Mail.MailPriority] ${Priority}, [Parameter(Mandatory=$true, Position=1)] [Alias('sub')] [ValidateNotNullOrEmpty()] [string] ${Subject}, [Parameter(Mandatory=$true, Position=0)] [Net.Mail.MailAddress[]] ${To}, [ValidateNotNullOrEmpty()] [Management.Automation.PSCredential] ${Credential}, [switch] ${UseSsl}, [ValidateRange(0, 2147483647)] [int] ${Port} = 25 ) #endregion try { $_smtpClient = New-Object Net.Mail.SmtpClient; $_message = New-Object Net.Mail.MailMessage; $_smtpClient.Host = $SmtpServer; $_smtpClient.Port = $Port; $_smtpClient.EnableSsl = $UseSsl; if ($null -ne $Credential) { # In PowerShell 2.0, assigning the results of GetNetworkCredential() to the SMTP client sometimes fails (with gmail, in testing), but # building a new NetworkCredential object containing only the UserName and Password works okay. $_tempCred = $Credential.GetNetworkCredential(); $_smtpClient.Credentials = New-Object Net.NetworkCredential($Credential.UserName, $_tempCred.Password); } else { $_smtpClient.UseDefaultCredentials = $true; } } catch { $_message.Dispose() throw } TRY { $_message.From = $From; $_message.Subject = $Subject; if ($BodyAsHtml) { $_bodyPart = [Net.Mail.AlternateView]::CreateAlternateViewFromString($Body, 'text/html'); } else { $_bodyPart = [Net.Mail.AlternateView]::CreateAlternateViewFromString($Body, 'text/plain'); } $_message.AlternateViews.Add($_bodyPart); if ($PSBoundParameters.ContainsKey('DeliveryNotificationOption')) { $_message.DeliveryNotificationOptions = $DeliveryNotificationOption; } if ($PSBoundParameters.ContainsKey('Priority')) { $_message.Priority = $Priority; } foreach ($_address in $To) { if (-not $_message.To.Contains($_address)) { $_message.To.Add($_address); } } if ($null -ne $Cc) { foreach ($_address in $Cc) { if (-not $_message.CC.Contains($_address)) { $_message.CC.Add($_address); } } } if ($null -ne $Bcc) { foreach ($_address in $Bcc) { if (-not $_message.Bcc.Contains($_address)) { $_message.Bcc.Add($_address); } } } if ($null -ne $Attachments) { foreach ($_file in $Attachments) { try { $_contentType = FileNameToContentType -FileName $_file; $_message.Attachments.Add((New-Object Net.Mail.Attachment($_file, $_contentType))); } catch { $_message.Dispose(); throw; } } } } CATCH { $_message.Dispose(); throw; } if ($PSBoundParameters.ContainsKey('InlineAttachments')) { foreach ($_entry in $InlineAttachments.GetEnumerator()) { $_file = $_entry.Value.ToString(); if ([string]::IsNullOrEmpty($_file)) { $_message.Dispose(); throw "Send-MailMessage: Values in the InlineAttachments table cannot be null."; } try { $_contentType = Get-FileContentType -FileName $_file; $_attachment = New-Object Net.Mail.LinkedResource($_file, $_contentType); $_attachment.ContentId = $_entry.Key; $_bodyPart.LinkedResources.Add($_attachment); } catch { $_message.Dispose(); throw; } } } try { $_smtpClient.Send($_message); } catch { throw; } finally { $_message.Dispose() } } #endregion #endregion |