Email daily calendar.
Requires Exchange Web Services Managed API.
powershell.exe -file email-daily-calendar.ps1 -config_file example_config.json
Email daily calendar.
Requires Exchange Web Services Managed API.
powershell.exe -file email-daily-calendar.ps1 -config_file example_config.json
[CmdletBinding()] | |
Param( | |
[Parameter(Mandatory = $True, Position = 1)] | |
[string]$config_file | |
) | |
$config = Get-Content $config_file -Raw | ConvertFrom-Json | |
Add-Type -Path "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll" | |
$exch_ver = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP2 | |
$exch_serv = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService($exch_ver) | |
$creds = New-Object Microsoft.Exchange.WebServices.Data.WebCredentials($config.credentials.email, $config.credentials.password) | |
$exch_serv.Credentials = $creds | |
## Code From http://poshcode.org/624 | |
## Create a compilation environment | |
$provider = New-Object Microsoft.CSharp.CSharpCodeProvider | |
$compiler = $provider.CreateCompiler() | |
$params = New-Object System.CodeDom.Compiler.CompilerParameters | |
$params.GenerateExecutable = $False | |
$params.GenerateInMemory = $True | |
$params.IncludeDebugInformation = $False | |
$params.ReferencedAssemblies.Add("System.DLL") | Out-Null | |
$ta_source=@' | |
namespace Local.ToolkitExtensions.Net.CertificatePolicy | |
{ | |
public class TrustAll : System.Net.ICertificatePolicy | |
{ | |
public TrustAll() {} | |
public bool CheckValidationResult(System.Net.ServicePoint sp, | |
System.Security.Cryptography.X509Certificates.X509Certificate cert, | |
System.Net.WebRequest req, int problem) | |
{ | |
return true; | |
} | |
} | |
} | |
'@ | |
$ta_results = $provider.CompileAssemblyFromSource($params, $ta_source) | |
$ta_assembly = $ta_results.CompiledAssembly | |
## We now create an instance of the TrustAll and attach it to the ServicePointManager | |
$trust_all = $ta_assembly.CreateInstance("Local.ToolkitExtensions.Net.CertificatePolicy.TrustAll") | |
[System.Net.ServicePointManager]::CertificatePolicy = $trust_all | |
## end code from http://poshcode.org/624 | |
$exch_serv.Url = "https://outlook.office365.com/EWS/Exchange.asmx" | |
Try | |
{ | |
#$exch_serv.AutodiscoverUrl($config.credentials.email, {$True}) | |
} | |
Catch | |
{ | |
$creds = New-Object Microsoft.Exchange.WebServices.Data.WebCredentials($config.credentials.eid, $config.credentials.password, $config.credentials.domain) | |
$exch_serv.Credentials = $creds | |
$exch_serv.AutodiscoverUrl($config.credentials.email, {$True}) | |
} | |
$name_resolutions = $exch_serv.ResolveName($config.from, [Microsoft.Exchange.WebServices.Data.ResolveNameSearchLocation]::DirectoryOnly, $True) | |
$display_name = $name_resolutions[0].Contact.DisplayName | |
$email_subject = "Calendar for " + $display_name + " [" + [System.DateTime]::Now.ToLongDateString() + "]" | |
$email_body = "----------" + "<br><br>" | |
$fid = New-Object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Calendar, $config.from) | |
$cf = [Microsoft.Exchange.WebServices.Data.CalendarFolder]::Bind($exch_serv, $fid) | |
$cv_today = New-Object Microsoft.Exchange.WebServices.Data.CalendarView([System.DateTime]::Today.AddHours(1), [System.DateTime]::Today.AddHours(23)) | |
$appts_today = $cf.FindAppointments($cv_today) | |
foreach ($appt in $appts_today) | |
{ | |
$email_body = $email_body + $appt.Organizer.Name + "<br>" | |
$email_body = $email_body + $appt.Subject + "<br>" | |
$email_body = $email_body + "Start: " + $appt.Start + "<br>" | |
$email_body = $email_body + "End: " + $appt.End + "<br><br>" | |
$email_body = $email_body + "----------" + "<br><br>" | |
} | |
$email = New-Object Microsoft.Exchange.WebServices.Data.EmailMessage($exch_serv) | |
if ($config.send_as) { | |
$email.From = New-Object Microsoft.Exchange.WebServices.Data.EmailAddress($config.send_as) | |
} | |
foreach ($email_to in $config.to) | |
{ | |
$email.ToRecipients.Add($email_to) | |
} | |
foreach ($email_bcc in $config.bcc) | |
{ | |
$email.BccRecipients.Add($email_bcc) | |
} | |
$email.Subject = $email_subject | |
$email.Body = New-Object Microsoft.Exchange.WebServices.Data.MessageBody($email_body) | |
$email.Send() |
{ | |
"credentials": { | |
"eid": "eid", | |
"password": "********", | |
"email": "example@example.com", | |
"domain": "example.com" | |
}, | |
"from": "calendar@example.com", | |
"to": [ | |
"calendar-notification-list@example.com" | |
], | |
"bcc": [ | |
"bcc@example.com" | |
] | |
} |