Skip to content

Instantly share code, notes, and snippets.

@williamjacksn
Last active December 27, 2015 04:29
Show Gist options
  • Save williamjacksn/7266828 to your computer and use it in GitHub Desktop.
Save williamjacksn/7266828 to your computer and use it in GitHub Desktop.
Email daily calendar
[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"
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment