PoshCode Archive  Hex Artifact Content

Artifact d8df8035bb774366078d59a5bd719c518124513e711c3b5817038e6ee48f8755:

  • File Send-HTMLFormattedEmail.ps1 — part of check-in [873ff725c7] at 2018-06-10 13:24:14 on branch trunk — Made some improvements (user: tysonkopczynski size: 5690)

0000: 23 20 65 6e 63 6f 64 69 6e 67 3a 20 61 73 63 69  # encoding: asci
0010: 69 0d 0a 23 20 61 70 69 3a 20 70 6f 77 65 72 73  i..# api: powers
0020: 68 65 6c 6c 0d 0a 23 20 74 69 74 6c 65 3a 20 53  hell..# title: S
0030: 65 6e 64 2d 48 54 4d 4c 46 6f 72 6d 61 74 74 65  end-HTMLFormatte
0040: 64 45 6d 61 69 6c 0d 0a 23 20 64 65 73 63 72 69  dEmail..# descri
0050: 70 74 69 6f 6e 3a 20 4d 61 64 65 20 73 6f 6d 65  ption: Made some
0060: 20 69 6d 70 72 6f 76 65 6d 65 6e 74 73 0d 0a 23   improvements..#
0070: 20 76 65 72 73 69 6f 6e 3a 20 31 2e 30 0d 0a 23   version: 1.0..#
0080: 20 74 79 70 65 3a 20 66 75 6e 63 74 69 6f 6e 0d   type: function.
0090: 0a 23 20 61 75 74 68 6f 72 3a 20 74 79 73 6f 6e  .# author: tyson
00a0: 6b 6f 70 63 7a 79 6e 73 6b 69 0d 0a 23 20 6c 69  kopczynski..# li
00b0: 63 65 6e 73 65 3a 20 43 43 30 0d 0a 23 20 66 75  cense: CC0..# fu
00c0: 6e 63 74 69 6f 6e 3a 20 53 65 6e 64 2d 48 54 4d  nction: Send-HTM
00d0: 4c 46 6f 72 6d 61 74 74 65 64 45 6d 61 69 6c 0d  LFormattedEmail.
00e0: 0a 23 20 78 2d 70 6f 73 68 63 6f 64 65 2d 69 64  .# x-poshcode-id
00f0: 3a 20 33 33 34 35 0d 0a 23 20 78 2d 64 65 72 69  : 3345..# x-deri
0100: 76 65 64 2d 66 72 6f 6d 2d 69 64 3a 20 33 33 34  ved-from-id: 334
0110: 38 0d 0a 23 20 78 2d 61 72 63 68 69 76 65 64 3a  8..# x-archived:
0120: 20 32 30 31 36 2d 31 30 2d 30 39 54 30 36 3a 35   2016-10-09T06:5
0130: 38 3a 31 38 0d 0a 23 20 78 2d 70 75 62 6c 69 73  8:18..# x-publis
0140: 68 65 64 3a 20 32 30 31 32 2d 30 34 2d 31 32 54  hed: 2012-04-12T
0150: 30 34 3a 34 31 3a 30 30 0d 0a 23 0d 0a 23 20 55  04:41:00..#..# U
0160: 73 65 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  se this function
0170: 20 74 6f 20 73 65 6e 64 20 61 6e 20 48 54 4d 4c   to send an HTML
0180: 20 46 6f 72 6d 61 74 74 65 64 20 45 6d 61 69 6c   Formatted Email
0190: 20 74 68 61 74 20 69 73 20 62 61 73 65 64 20 6f   that is based o
01a0: 6e 20 61 6e 20 58 53 4c 54 20 74 65 6d 70 6c 61  n an XSLT templa
01b0: 74 65 2e 20 20 54 68 69 73 20 66 75 6e 63 74 69  te.  This functi
01c0: 6f 6e 20 69 73 20 62 61 73 65 64 20 6f 6e 20 61  on is based on a
01d0: 20 62 6c 6f 67 20 70 6f 73 74 20 62 79 20 45 72   blog post by Er
01e0: 69 6b 20 4d 63 43 61 72 74 79 20 28 68 74 74 70  ik McCarty (http
01f0: 3a 2f 2f 65 77 6d 63 63 61 72 74 79 2e 73 70 61  ://ewmccarty.spa
0200: 63 65 73 2e 6c 69 76 65 2e 63 6f 6d 29 2e 0d 0a  ces.live.com)...
0210: 23 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  #..#############
0220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0240: 23 23 23 23 23 0d 0a 23 20 63 6d 64 6c 65 74 73  #####..# cmdlets
0250: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
0260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0280: 23 23 23 23 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d  ####..#---------
0290: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02b0: 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 53 65 6e 64  --------..# Send
02c0: 2d 48 54 4d 4c 46 6f 72 6d 61 74 74 65 64 45 6d  -HTMLFormattedEm
02d0: 61 69 6c 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ail..#----------
02e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0300: 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 55 73 61 67 65  -------..# Usage
0310: 3a 09 53 65 6e 64 2d 48 54 4d 4c 46 6f 72 6d 61  :.Send-HTMLForma
0320: 74 74 65 64 45 6d 61 69 6c 20 2d 3f 0d 0a 23 2d  ttedEmail -?..#-
0330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0340: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0360: 0d 0a 66 75 6e 63 74 69 6f 6e 20 53 65 6e 64 2d  ..function Send-
0370: 48 54 4d 4c 46 6f 72 6d 61 74 74 65 64 45 6d 61  HTMLFormattedEma
0380: 69 6c 20 7b 0d 0a 09 3c 23 20 0d 0a 09 2e 53 79  il {...<# ....Sy
0390: 6e 6f 70 73 69 73 0d 0a 20 20 20 20 09 55 73 65  nopsis..    .Use
03a0: 64 20 74 6f 20 73 65 6e 64 20 61 6e 20 48 54 4d  d to send an HTM
03b0: 4c 20 46 6f 72 6d 61 74 74 65 64 20 45 6d 61 69  L Formatted Emai
03c0: 6c 2e 0d 0a 20 20 20 20 2e 44 65 73 63 72 69 70  l...    .Descrip
03d0: 74 69 6f 6e 0d 0a 20 20 20 20 09 55 73 65 64 20  tion..    .Used 
03e0: 74 6f 20 73 65 6e 64 20 61 6e 20 48 54 4d 4c 20  to send an HTML 
03f0: 46 6f 72 6d 61 74 74 65 64 20 45 6d 61 69 6c 20  Formatted Email 
0400: 74 68 61 74 20 69 73 20 62 61 73 65 64 20 6f 6e  that is based on
0410: 20 61 6e 20 58 53 4c 54 20 74 65 6d 70 6c 61 74   an XSLT templat
0420: 65 2e 0d 0a 09 2e 50 61 72 61 6d 65 74 65 72 20  e.....Parameter 
0430: 54 6f 0d 0a 09 09 45 6d 61 69 6c 20 61 64 64 72  To....Email addr
0440: 65 73 73 20 6f 72 20 61 64 64 72 65 73 73 65 73  ess or addresses
0450: 20 66 6f 72 20 77 68 6f 6d 20 74 68 65 20 6d 65   for whom the me
0460: 73 73 61 67 65 20 69 73 20 62 65 69 6e 67 20 73  ssage is being s
0470: 65 6e 74 20 74 6f 2e 0d 0a 09 09 41 64 64 72 65  ent to.....Addre
0480: 73 73 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73  sses should be s
0490: 65 70 65 72 61 74 65 64 20 75 73 69 6e 67 20 3b  eperated using ;
04a0: 2e 0d 0a 09 2e 50 61 72 61 6d 65 74 65 72 20 54  .....Parameter T
04b0: 6f 44 69 73 4e 61 6d 65 0d 0a 09 09 44 69 73 70  oDisName....Disp
04c0: 6c 61 79 20 6e 61 6d 65 20 66 6f 72 20 77 68 6f  lay name for who
04d0: 6d 20 74 68 65 20 6d 65 73 73 61 67 65 20 69 73  m the message is
04e0: 20 62 65 69 6e 67 20 73 65 6e 74 20 74 6f 2e 0d   being sent to..
04f0: 0a 09 2e 50 61 72 61 6d 65 74 65 72 20 43 43 0d  ...Parameter CC.
0500: 0a 09 09 45 6d 61 69 6c 20 61 64 64 72 65 73 73  ...Email address
0510: 20 69 66 20 79 6f 75 20 77 61 6e 74 20 43 43 20   if you want CC 
0520: 61 20 72 65 63 69 70 69 65 6e 74 2e 0d 0a 09 09  a recipient.....
0530: 41 64 64 72 65 73 73 65 73 20 73 68 6f 75 6c 64  Addresses should
0540: 20 62 65 20 73 65 70 65 72 61 74 65 64 20 75 73   be seperated us
0550: 69 6e 67 20 3b 2e 0d 0a 09 2e 50 61 72 61 6d 65  ing ;.....Parame
0560: 74 65 72 20 42 43 43 0d 0a 09 09 45 6d 61 69 6c  ter BCC....Email
0570: 20 61 64 64 72 65 73 73 20 69 66 20 79 6f 75 20   address if you 
0580: 77 61 6e 74 20 42 43 43 20 61 20 72 65 63 69 70  want BCC a recip
0590: 69 65 6e 74 2e 0d 0a 09 09 41 64 64 72 65 73 73  ient.....Address
05a0: 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73 65 70  es should be sep
05b0: 65 72 61 74 65 64 20 75 73 69 6e 67 20 3b 2e 0d  erated using ;..
05c0: 0a 09 2e 50 61 72 61 6d 65 74 65 72 20 46 72 6f  ...Parameter Fro
05d0: 6d 0d 0a 09 09 45 6d 61 69 6c 20 61 64 64 72 65  m....Email addre
05e0: 73 73 20 66 6f 72 20 77 68 6f 6d 20 74 68 65 20  ss for whom the 
05f0: 6d 65 73 73 61 67 65 20 63 6f 6d 65 73 20 66 72  message comes fr
0600: 6f 6d 2e 0d 0a 09 2e 50 61 72 61 6d 65 74 65 72  om.....Parameter
0610: 20 46 72 6f 6d 44 69 73 4e 61 6d 65 0d 0a 09 09   FromDisName....
0620: 44 69 73 70 6c 61 79 20 6e 61 6d 65 20 66 6f 72  Display name for
0630: 20 77 68 6f 6d 20 74 68 65 20 6d 65 73 73 61 67   whom the messag
0640: 65 20 63 6f 6d 65 73 20 66 72 6f 6d 2e 0d 0a 09  e comes from....
0650: 2e 50 61 72 61 6d 65 74 65 72 20 53 75 62 6a 65  .Parameter Subje
0660: 63 74 0d 0a 09 09 54 68 65 20 73 75 62 6a 65 63  ct....The subjec
0670: 74 20 6f 66 20 74 68 65 20 65 6d 61 69 6c 20 61  t of the email a
0680: 64 64 72 65 73 73 2e 0d 0a 09 2e 50 61 72 61 6d  ddress.....Param
0690: 65 74 65 72 20 43 6f 6e 74 65 6e 74 0d 0a 09 09  eter Content....
06a0: 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  The content of t
06b0: 68 65 20 6d 65 73 73 61 67 65 20 28 74 6f 20 62  he message (to b
06c0: 65 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  e inserted into 
06d0: 74 68 65 20 58 53 4c 20 54 65 6d 70 6c 61 74 65  the XSL Template
06e0: 29 2e 0d 0a 09 2e 50 61 72 61 6d 65 74 65 72 20  ).....Parameter 
06f0: 52 65 6c 61 79 0d 0a 09 09 46 51 44 4e 20 6f 72  Relay....FQDN or
0700: 20 49 50 20 6f 66 20 74 68 65 20 53 4d 54 50 20   IP of the SMTP 
0710: 72 65 6c 61 79 20 74 6f 20 73 65 6e 64 20 74 68  relay to send th
0720: 65 20 6d 65 73 73 61 67 65 20 74 6f 2e 0d 0a 09  e message to....
0730: 2e 58 53 4c 50 61 74 68 0d 0a 09 09 54 68 65 20  .XSLPath....The 
0740: 66 75 6c 6c 20 70 61 74 68 20 74 6f 20 74 68 65  full path to the
0750: 20 58 53 4c 20 74 65 6d 70 6c 61 74 65 20 74 68   XSL template th
0760: 61 74 20 69 73 20 74 6f 20 62 65 20 75 73 65 64  at is to be used
0770: 2e 0d 0a 09 23 3e 0d 0a 20 20 20 20 70 61 72 61  ....#>..    para
0780: 6d 28 0d 0a 09 09 5b 50 61 72 61 6d 65 74 65 72  m(....[Parameter
0790: 28 4d 61 6e 64 61 74 6f 72 79 3d 24 54 72 75 65  (Mandatory=$True
07a0: 29 5d 5b 53 74 72 69 6e 67 5d 24 54 6f 2c 0d 0a  )][String]$To,..
07b0: 09 09 5b 50 61 72 61 6d 65 74 65 72 28 4d 61 6e  ..[Parameter(Man
07c0: 64 61 74 6f 72 79 3d 24 54 72 75 65 29 5d 5b 53  datory=$True)][S
07d0: 74 72 69 6e 67 5d 24 54 6f 44 69 73 4e 61 6d 65  tring]$ToDisName
07e0: 2c 0d 0a 09 09 5b 53 74 72 69 6e 67 5d 24 43 43  ,....[String]$CC
07f0: 2c 0d 0a 09 09 5b 53 74 72 69 6e 67 5d 24 42 43  ,....[String]$BC
0800: 43 2c 0d 0a 09 09 5b 50 61 72 61 6d 65 74 65 72  C,....[Parameter
0810: 28 4d 61 6e 64 61 74 6f 72 79 3d 24 54 72 75 65  (Mandatory=$True
0820: 29 5d 5b 53 74 72 69 6e 67 5d 24 46 72 6f 6d 2c  )][String]$From,
0830: 0d 0a 09 09 5b 50 61 72 61 6d 65 74 65 72 28 4d  ....[Parameter(M
0840: 61 6e 64 61 74 6f 72 79 3d 24 54 72 75 65 29 5d  andatory=$True)]
0850: 5b 53 74 72 69 6e 67 5d 24 46 72 6f 6d 44 69 73  [String]$FromDis
0860: 4e 61 6d 65 2c 0d 0a 09 09 5b 50 61 72 61 6d 65  Name,....[Parame
0870: 74 65 72 28 4d 61 6e 64 61 74 6f 72 79 3d 24 54  ter(Mandatory=$T
0880: 72 75 65 29 5d 5b 53 74 72 69 6e 67 5d 24 53 75  rue)][String]$Su
0890: 62 6a 65 63 74 2c 0d 0a 09 09 5b 50 61 72 61 6d  bject,....[Param
08a0: 65 74 65 72 28 4d 61 6e 64 61 74 6f 72 79 3d 24  eter(Mandatory=$
08b0: 54 72 75 65 29 5d 5b 53 74 72 69 6e 67 5d 24 43  True)][String]$C
08c0: 6f 6e 74 65 6e 74 2c 0d 0a 09 09 5b 50 61 72 61  ontent,....[Para
08d0: 6d 65 74 65 72 28 4d 61 6e 64 61 74 6f 72 79 3d  meter(Mandatory=
08e0: 24 54 72 75 65 29 5d 5b 53 74 72 69 6e 67 5d 24  $True)][String]$
08f0: 52 65 6c 61 79 2c 0d 0a 09 09 5b 50 61 72 61 6d  Relay,....[Param
0900: 65 74 65 72 28 4d 61 6e 64 61 74 6f 72 79 3d 24  eter(Mandatory=$
0910: 54 72 75 65 29 5d 5b 53 74 72 69 6e 67 5d 24 58  True)][String]$X
0920: 53 4c 50 61 74 68 0d 0a 20 20 20 20 20 20 20 20  SLPath..        
0930: 29 0d 0a 20 20 20 20 0d 0a 20 20 20 20 74 72 79  )..    ..    try
0940: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 20 4c 6f   {..        # Lo
0950: 61 64 20 58 53 4c 20 41 72 67 75 6d 65 6e 74 20  ad XSL Argument 
0960: 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 24 58  List..        $X
0970: 53 4c 41 72 67 20 3d 20 4e 65 77 2d 4f 62 6a 65  SLArg = New-Obje
0980: 63 74 20 53 79 73 74 65 6d 2e 58 6d 6c 2e 58 73  ct System.Xml.Xs
0990: 6c 2e 58 73 6c 74 41 72 67 75 6d 65 6e 74 4c 69  l.XsltArgumentLi
09a0: 73 74 0d 0a 20 20 20 20 20 20 20 20 24 58 53 4c  st..        $XSL
09b0: 41 72 67 2e 43 6c 65 61 72 28 29 20 0d 0a 20 20  Arg.Clear() ..  
09c0: 20 20 20 20 20 20 24 58 53 4c 41 72 67 2e 41 64        $XSLArg.Ad
09d0: 64 50 61 72 61 6d 28 22 54 6f 22 2c 20 24 4e 75  dParam("To", $Nu
09e0: 6c 6c 2c 20 24 54 6f 44 69 73 4e 61 6d 65 29 0d  ll, $ToDisName).
09f0: 0a 20 20 20 20 20 20 20 20 24 58 53 4c 41 72 67  .        $XSLArg
0a00: 2e 41 64 64 50 61 72 61 6d 28 22 43 6f 6e 74 65  .AddParam("Conte
0a10: 6e 74 22 2c 20 24 4e 75 6c 6c 2c 20 24 43 6f 6e  nt", $Null, $Con
0a20: 74 65 6e 74 29 0d 0a 0d 0a 20 20 20 20 20 20 20  tent)....       
0a30: 20 23 20 4c 6f 61 64 20 44 6f 63 75 6d 65 6e 74   # Load Document
0a40: 73 0d 0a 20 20 20 20 20 20 20 20 24 42 61 73 65  s..        $Base
0a50: 58 4d 4c 44 6f 63 20 3d 20 4e 65 77 2d 4f 62 6a  XMLDoc = New-Obj
0a60: 65 63 74 20 53 79 73 74 65 6d 2e 58 6d 6c 2e 58  ect System.Xml.X
0a70: 6d 6c 44 6f 63 75 6d 65 6e 74 0d 0a 20 20 20 20  mlDocument..    
0a80: 20 20 20 20 24 42 61 73 65 58 4d 4c 44 6f 63 2e      $BaseXMLDoc.
0a90: 4c 6f 61 64 58 6d 6c 28 22 3c 72 6f 6f 74 2f 3e  LoadXml("<root/>
0aa0: 22 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 24 58  ")....        $X
0ab0: 53 4c 54 72 61 6e 73 20 3d 20 4e 65 77 2d 4f 62  SLTrans = New-Ob
0ac0: 6a 65 63 74 20 53 79 73 74 65 6d 2e 58 6d 6c 2e  ject System.Xml.
0ad0: 58 73 6c 2e 58 73 6c 43 6f 6d 70 69 6c 65 64 54  Xsl.XslCompiledT
0ae0: 72 61 6e 73 66 6f 72 6d 0d 0a 20 20 20 20 20 20  ransform..      
0af0: 20 20 24 58 53 4c 54 72 61 6e 73 2e 4c 6f 61 64    $XSLTrans.Load
0b00: 28 24 58 53 4c 50 61 74 68 29 0d 0a 0d 0a 20 20  ($XSLPath)....  
0b10: 20 20 20 20 20 20 23 50 65 72 66 6f 72 6d 20 58        #Perform X
0b20: 53 4c 20 54 72 61 6e 73 66 6f 72 6d 0d 0a 20 20  SL Transform..  
0b30: 20 20 20 20 20 20 24 46 69 6e 61 6c 58 4d 4c 44        $FinalXMLD
0b40: 6f 63 20 3d 20 4e 65 77 2d 4f 62 6a 65 63 74 20  oc = New-Object 
0b50: 53 79 73 74 65 6d 2e 58 6d 6c 2e 58 6d 6c 44 6f  System.Xml.XmlDo
0b60: 63 75 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  cument..        
0b70: 24 4d 65 6d 53 74 72 65 61 6d 20 3d 20 4e 65 77  $MemStream = New
0b80: 2d 4f 62 6a 65 63 74 20 53 79 73 74 65 6d 2e 49  -Object System.I
0b90: 4f 2e 4d 65 6d 6f 72 79 53 74 72 65 61 6d 0d 0a  O.MemoryStream..
0ba0: 20 20 20 20 20 0d 0a 20 20 20 20 20 20 20 20 24       ..        $
0bb0: 58 4d 4c 57 72 69 74 65 72 20 3d 20 5b 53 79 73  XMLWriter = [Sys
0bc0: 74 65 6d 2e 58 6d 6c 2e 58 6d 6c 57 72 69 74 65  tem.Xml.XmlWrite
0bd0: 72 5d 3a 3a 43 72 65 61 74 65 28 24 4d 65 6d 53  r]::Create($MemS
0be0: 74 72 65 61 6d 29 0d 0a 20 20 20 20 20 20 20 20  tream)..        
0bf0: 24 58 53 4c 54 72 61 6e 73 2e 54 72 61 6e 73 66  $XSLTrans.Transf
0c00: 6f 72 6d 28 24 42 61 73 65 58 4d 4c 44 6f 63 2c  orm($BaseXMLDoc,
0c10: 20 24 58 53 4c 41 72 67 2c 20 24 58 4d 4c 57 72   $XSLArg, $XMLWr
0c20: 69 74 65 72 29 0d 0a 0d 0a 20 20 20 20 20 20 20  iter)....       
0c30: 20 24 58 4d 4c 57 72 69 74 65 72 2e 46 6c 75 73   $XMLWriter.Flus
0c40: 68 28 29 0d 0a 20 20 20 20 20 20 20 20 24 4d 65  h()..        $Me
0c50: 6d 53 74 72 65 61 6d 2e 50 6f 73 69 74 69 6f 6e  mStream.Position
0c60: 20 3d 20 30 0d 0a 20 20 20 20 20 0d 0a 20 20 20   = 0..     ..   
0c70: 20 20 20 20 20 23 20 4c 6f 61 64 20 74 68 65 20       # Load the 
0c80: 72 65 73 75 6c 74 73 0d 0a 20 20 20 20 20 20 20  results..       
0c90: 20 24 46 69 6e 61 6c 58 4d 4c 44 6f 63 2e 4c 6f   $FinalXMLDoc.Lo
0ca0: 61 64 28 24 4d 65 6d 53 74 72 65 61 6d 29 20 0d  ad($MemStream) .
0cb0: 0a 20 20 20 20 20 20 20 20 24 42 6f 64 79 20 3d  .        $Body =
0cc0: 20 24 46 69 6e 61 6c 58 4d 4c 44 6f 63 2e 47 65   $FinalXMLDoc.Ge
0cd0: 74 5f 4f 75 74 65 72 58 4d 4c 28 29 0d 0a 0d 0a  t_OuterXML()....
0ce0: 09 09 23 20 43 72 65 61 74 65 20 4d 65 73 73 61  ..# Create Messa
0cf0: 67 65 20 4f 62 6a 65 63 74 0d 0a 20 20 20 20 20  ge Object..     
0d00: 20 20 20 24 4d 65 73 73 61 67 65 20 3d 20 4e 65     $Message = Ne
0d10: 77 2d 4f 62 6a 65 63 74 20 53 79 73 74 65 6d 2e  w-Object System.
0d20: 4e 65 74 2e 4d 61 69 6c 2e 4d 61 69 6c 4d 65 73  Net.Mail.MailMes
0d30: 73 61 67 65 0d 0a 09 09 0d 0a 09 09 23 20 4e 6f  sage........# No
0d40: 77 20 50 6f 70 75 6c 61 74 65 20 74 68 65 20 4d  w Populate the M
0d50: 65 73 73 61 67 65 20 4f 62 6a 65 63 74 2e 0d 0a  essage Object...
0d60: 20 20 20 20 20 20 20 20 24 4d 65 73 73 61 67 65          $Message
0d70: 2e 53 75 62 6a 65 63 74 20 3d 20 24 53 75 62 6a  .Subject = $Subj
0d80: 65 63 74 0d 0a 20 20 20 20 20 20 20 20 24 4d 65  ect..        $Me
0d90: 73 73 61 67 65 2e 42 6f 64 79 20 3d 20 24 42 6f  ssage.Body = $Bo
0da0: 64 79 0d 0a 20 20 20 20 20 20 20 20 24 4d 65 73  dy..        $Mes
0db0: 73 61 67 65 2e 49 73 42 6f 64 79 48 54 4d 4c 20  sage.IsBodyHTML 
0dc0: 3d 20 24 54 72 75 65 0d 0a 09 09 0d 0a 09 09 23  = $True........#
0dd0: 20 41 64 64 20 46 72 6f 6d 0d 0a 20 20 20 20 20   Add From..     
0de0: 20 20 20 24 4d 65 73 73 46 72 6f 6d 20 3d 20 4e     $MessFrom = N
0df0: 65 77 2d 4f 62 6a 65 63 74 20 53 79 73 74 65 6d  ew-Object System
0e00: 2e 4e 65 74 2e 4d 61 69 6c 2e 4d 61 69 6c 41 64  .Net.Mail.MailAd
0e10: 64 72 65 73 73 20 24 46 72 6f 6d 2c 20 24 46 72  dress $From, $Fr
0e20: 6f 6d 44 69 73 4e 61 6d 65 0d 0a 09 09 24 4d 65  omDisName....$Me
0e30: 73 73 61 67 65 2e 46 72 6f 6d 20 3d 20 24 4d 65  ssage.From = $Me
0e40: 73 73 46 72 6f 6d 0d 0a 0d 0a 09 09 23 20 41 64  ssFrom......# Ad
0e50: 64 20 54 6f 0d 0a 09 09 24 54 6f 20 3d 20 24 54  d To....$To = $T
0e60: 6f 2e 53 70 6c 69 74 28 22 3b 22 29 20 23 20 4d  o.Split(";") # M
0e70: 61 6b 65 20 61 6e 20 61 72 72 61 79 20 6f 66 20  ake an array of 
0e80: 61 64 64 72 65 73 73 65 73 2e 0d 0a 09 09 24 54  addresses.....$T
0e90: 6f 20 7c 20 66 6f 72 65 61 63 68 20 7b 24 4d 65  o | foreach {$Me
0ea0: 73 73 61 67 65 2e 54 6f 2e 41 64 64 28 28 4e 65  ssage.To.Add((Ne
0eb0: 77 2d 4f 62 6a 65 63 74 20 53 79 73 74 65 6d 2e  w-Object System.
0ec0: 4e 65 74 2e 4d 61 69 6c 2e 4d 61 69 6c 61 64 64  Net.Mail.Mailadd
0ed0: 72 65 73 73 20 24 5f 2e 54 72 69 6d 28 29 29 29  ress $_.Trim()))
0ee0: 7d 20 23 20 41 64 64 20 74 68 65 6d 20 74 6f 20  } # Add them to 
0ef0: 74 68 65 20 6d 65 73 73 61 67 65 20 6f 62 6a 65  the message obje
0f00: 63 74 2e 0d 0a 09 09 0d 0a 09 09 23 20 41 64 64  ct.........# Add
0f10: 20 43 43 0d 0a 09 09 69 66 20 28 24 43 43 29 7b   CC....if ($CC){
0f20: 0d 0a 09 09 09 24 43 43 20 3d 20 24 43 43 2e 53  .....$CC = $CC.S
0f30: 70 6c 69 74 28 22 3b 22 29 20 23 20 4d 61 6b 65  plit(";") # Make
0f40: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 61 64 64   an array of add
0f50: 72 65 73 73 65 73 2e 0d 0a 09 09 09 24 43 43 20  resses......$CC 
0f60: 7c 20 66 6f 72 65 61 63 68 20 7b 24 4d 65 73 73  | foreach {$Mess
0f70: 61 67 65 2e 43 43 2e 41 64 64 28 28 4e 65 77 2d  age.CC.Add((New-
0f80: 4f 62 6a 65 63 74 20 53 79 73 74 65 6d 2e 4e 65  Object System.Ne
0f90: 74 2e 4d 61 69 6c 2e 4d 61 69 6c 61 64 64 72 65  t.Mail.Mailaddre
0fa0: 73 73 20 24 5f 2e 54 72 69 6d 28 29 29 29 7d 20  ss $_.Trim()))} 
0fb0: 23 20 41 64 64 20 74 68 65 6d 20 74 6f 20 74 68  # Add them to th
0fc0: 65 20 6d 65 73 73 61 67 65 20 6f 62 6a 65 63 74  e message object
0fd0: 2e 0d 0a 09 09 09 7d 0d 0a 0d 0a 09 09 23 20 41  ......}......# A
0fe0: 64 64 20 42 43 43 0d 0a 09 09 69 66 20 28 24 42  dd BCC....if ($B
0ff0: 43 43 29 7b 0d 0a 09 09 09 24 42 43 43 20 3d 20  CC){.....$BCC = 
1000: 24 42 43 43 2e 53 70 6c 69 74 28 22 3b 22 29 20  $BCC.Split(";") 
1010: 23 20 4d 61 6b 65 20 61 6e 20 61 72 72 61 79 20  # Make an array 
1020: 6f 66 20 61 64 64 72 65 73 73 65 73 2e 0d 0a 09  of addresses....
1030: 09 09 24 42 43 43 20 7c 20 66 6f 72 65 61 63 68  ..$BCC | foreach
1040: 20 7b 24 4d 65 73 73 61 67 65 2e 42 43 43 2e 41   {$Message.BCC.A
1050: 64 64 28 28 4e 65 77 2d 4f 62 6a 65 63 74 20 53  dd((New-Object S
1060: 79 73 74 65 6d 2e 4e 65 74 2e 4d 61 69 6c 2e 4d  ystem.Net.Mail.M
1070: 61 69 6c 61 64 64 72 65 73 73 20 24 5f 2e 54 72  ailaddress $_.Tr
1080: 69 6d 28 29 29 29 7d 20 23 20 41 64 64 20 74 68  im()))} # Add th
1090: 65 6d 20 74 6f 20 74 68 65 20 6d 65 73 73 61 67  em to the messag
10a0: 65 20 6f 62 6a 65 63 74 2e 0d 0a 09 09 09 7d 0d  e object......}.
10b0: 0a 20 20 20 20 20 0d 0a 20 20 20 20 20 20 20 20  .     ..        
10c0: 23 20 43 72 65 61 74 65 20 53 4d 54 50 20 43 6c  # Create SMTP Cl
10d0: 69 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 24 43  ient..        $C
10e0: 6c 69 65 6e 74 20 3d 20 4e 65 77 2d 4f 62 6a 65  lient = New-Obje
10f0: 63 74 20 53 79 73 74 65 6d 2e 4e 65 74 2e 4d 61  ct System.Net.Ma
1100: 69 6c 2e 53 6d 74 70 43 6c 69 65 6e 74 20 24 52  il.SmtpClient $R
1110: 65 6c 61 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20  elay....        
1120: 23 20 53 65 6e 64 20 54 68 65 20 4d 65 73 73 61  # Send The Messa
1130: 67 65 0d 0a 20 20 20 20 20 20 20 20 24 43 6c 69  ge..        $Cli
1140: 65 6e 74 2e 53 65 6e 64 28 24 4d 65 73 73 61 67  ent.Send($Messag
1150: 65 29 0d 0a 20 20 20 20 20 20 20 20 7d 20 20 0d  e)..        }  .
1160: 0a 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 09 09  .    catch {....
1170: 74 68 72 6f 77 20 24 5f 0d 0a 20 20 20 20 20 20  throw $_..      
1180: 20 20 7d 20 20 20 0d 0a 20 20 20 20 7d 0d 0a 0d    }   ..    }...
1190: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
11a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11c0: 23 23 23 0d 0a 23 20 4d 61 69 6e 0d 0a 23 23 23  ###..# Main..###
11d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
1200: 0a 45 78 70 6f 72 74 2d 4d 6f 64 75 6c 65 4d 65  .Export-ModuleMe
1210: 6d 62 65 72 20 53 65 6e 64 2d 48 54 4d 4c 46 6f  mber Send-HTMLFo
1220: 72 6d 61 74 74 65 64 45 6d 61 69 6c 0d 0a 0d 0a  rmattedEmail....
1230: 23 23 23 20 58 53 4c 54 20 54 65 6d 70 6c 61 74  ### XSLT Templat
1240: 65 20 45 78 61 6d 70 6c 65 0d 0a 3c 3f 78 6d 6c  e Example..<?xml
1250: 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 3f 3e   version="1.0"?>
1260: 0d 0a 3c 78 73 6c 3a 73 74 79 6c 65 73 68 65 65  ..<xsl:styleshee
1270: 74 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 20  t version="1.0" 
1280: 78 6d 6c 6e 73 3a 78 73 6c 3d 22 68 74 74 70 3a  xmlns:xsl="http:
1290: 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f 31 39 39  //www.w3.org/199
12a0: 39 2f 58 53 4c 2f 54 72 61 6e 73 66 6f 72 6d 22  9/XSL/Transform"
12b0: 3e 0d 0a 20 0d 0a 3c 78 73 6c 3a 6f 75 74 70 75  >.. ..<xsl:outpu
12c0: 74 20 6d 65 64 69 61 2d 74 79 70 65 3d 22 78 6d  t media-type="xm
12d0: 6c 22 20 6f 6d 69 74 2d 78 6d 6c 2d 64 65 63 6c  l" omit-xml-decl
12e0: 61 72 61 74 69 6f 6e 3d 22 79 65 73 22 20 2f 3e  aration="yes" />
12f0: 0d 0a 20 20 20 20 3c 78 73 6c 3a 70 61 72 61 6d  ..    <xsl:param
1300: 20 6e 61 6d 65 3d 22 54 6f 22 2f 3e 0d 0a 20 20   name="To"/>..  
1310: 20 20 3c 78 73 6c 3a 70 61 72 61 6d 20 6e 61 6d    <xsl:param nam
1320: 65 3d 22 43 6f 6e 74 65 6e 74 22 2f 3e 0d 0a 20  e="Content"/>.. 
1330: 20 20 20 3c 78 73 6c 3a 74 65 6d 70 6c 61 74 65     <xsl:template
1340: 20 6d 61 74 63 68 3d 22 2f 22 3e 0d 0a 20 20 20   match="/">..   
1350: 20 20 20 20 20 3c 68 74 6d 6c 3e 0d 0a 20 20 20       <html>..   
1360: 20 20 20 20 20 20 20 20 20 3c 68 65 61 64 3e 0d           <head>.
1370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1380: 20 3c 74 69 74 6c 65 3e 4d 79 20 46 69 72 73 74   <title>My First
1390: 20 46 6f 72 6d 61 74 74 65 64 20 45 6d 61 69 6c   Formatted Email
13a0: 3c 2f 74 69 74 6c 65 3e 0d 0a 20 20 20 20 20 20  </title>..      
13b0: 20 20 20 20 20 20 3c 2f 68 65 61 64 3e 0d 0a 20        </head>.. 
13c0: 20 20 20 20 20 20 20 20 20 20 20 3c 62 6f 64 79             <body
13d0: 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 3c  >..            <
13e0: 64 69 76 20 77 69 64 74 68 3d 22 34 30 30 70 78  div width="400px
13f0: 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
1400: 20 20 20 20 3c 70 3e 44 65 61 72 20 3c 78 73 6c      <p>Dear <xsl
1410: 3a 76 61 6c 75 65 2d 6f 66 20 73 65 6c 65 63 74  :value-of select
1420: 3d 22 24 54 6f 22 20 2f 3e 2c 3c 2f 70 3e 0d 0a  ="$To" />,</p>..
1430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1440: 3c 70 3e 3c 2f 70 3e 0d 0a 20 20 20 20 20 20 20  <p></p>..       
1450: 20 20 20 20 20 20 20 20 20 3c 70 3e 3c 78 73 6c           <p><xsl
1460: 3a 76 61 6c 75 65 2d 6f 66 20 73 65 6c 65 63 74  :value-of select
1470: 3d 22 24 43 6f 6e 74 65 6e 74 22 20 2f 3e 3c 2f  ="$Content" /></
1480: 70 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p>..            
1490: 20 20 20 20 3c 70 3e 3c 2f 70 3e 0d 0a 09 09 09      <p></p>.....
14a0: 09 3c 70 3e 3c 73 74 72 6f 6e 67 3e 50 6c 65 61  .<p><strong>Plea
14b0: 73 65 20 64 6f 20 6e 6f 74 20 72 65 73 70 6f 6e  se do not respon
14c0: 64 20 74 6f 20 74 68 69 73 20 65 6d 61 69 6c 21  d to this email!
14d0: 3c 2f 73 74 72 6f 6e 67 3e 3c 62 72 20 2f 3e 0d  </strong><br />.
14e0: 0a 09 09 09 09 09 41 6e 20 61 75 74 6f 6d 61 74  ......An automat
14f0: 65 64 20 73 79 73 74 65 6d 20 73 65 6e 74 20 74  ed system sent t
1500: 68 69 73 20 65 6d 61 69 6c 2c 20 69 66 20 61 6e  his email, if an
1510: 79 20 70 6f 69 6e 74 20 79 6f 75 20 68 61 76 65  y point you have
1520: 20 61 6e 79 20 71 75 65 73 74 69 6f 6e 73 20 6f   any questions o
1530: 72 20 63 6f 6e 63 65 72 6e 73 20 70 6c 65 61 73  r concerns pleas
1540: 65 20 6f 70 65 6e 20 61 20 68 65 6c 70 20 64 65  e open a help de
1550: 73 6b 20 74 69 63 6b 65 74 2e 3c 2f 70 3e 0d 0a  sk ticket.</p>..
1560: 09 09 09 09 3c 70 3e 3c 2f 70 3e 0d 0a 20 20 20  ....<p></p>..   
1570: 20 20 20 20 20 20 20 20 20 3c 41 64 64 72 65 73           <Addres
1580: 73 3e 0d 0a 09 09 09 4d 61 6e 79 20 74 68 61 6e  s>.....Many than
1590: 6b 73 20 66 72 6f 6d 20 79 6f 75 72 3a 3c 62 72  ks from your:<br
15a0: 20 2f 3e 09 0d 0a 20 20 20 20 20 20 20 20 20 20   />...          
15b0: 20 20 52 65 61 6c 6c 79 20 43 6f 6f 6c 20 49 54    Really Cool IT
15c0: 20 54 65 61 6d 3c 62 72 20 2f 3e 0d 0a 20 20 20   Team<br />..   
15d0: 20 20 20 20 20 20 20 20 20 3c 2f 41 64 64 72 65           </Addre
15e0: 73 73 3e 0d 0a 20 20 20 20 20 20 20 20 3c 2f 64  ss>..        </d
15f0: 69 76 3e 0d 0a 20 20 20 20 20 20 3c 2f 62 6f 64  iv>..      </bod
1600: 79 3e 0d 0a 20 20 20 20 3c 2f 68 74 6d 6c 3e 0d  y>..    </html>.
1610: 0a 20 20 20 20 3c 2f 78 73 6c 3a 74 65 6d 70 6c  .    </xsl:templ
1620: 61 74 65 3e 20 0d 0a 3c 2f 78 73 6c 3a 73 74 79  ate> ..</xsl:sty
1630: 6c 65 73 68 65 65 74 3e 0d 0a                    lesheet>..