I have the following code to connect to ExchangeOnline >> generate csv file >> send the file by email using Office 365 smtp:-

Connect-ExchangeOnline
$SiteIDs = '64898c8f-2d5f-4e0e-9a9b-eb9828975a9e','20e6140c-0441-4988-b36c-c61cf3400847'
$Operations = @('FileAccessed','FileDownloaded','FileDeleted')
$OutputFile = ".\UnifiedAuditLog_FULL.csv"
$Today = Get-Date -Date (Get-Date -Format “yyyy-MM-dd”)
$intDays = 14
For ($i=0; $i -le $intDays; $i++){
  For ($j=23; $j -ge 0; $j--){
    $StartDate = ($Today.AddDays(-$i)).AddHours($j)
    $EndDate = ($Today.AddDays(-$i)).AddHours($j + 1)
    $Audit = Search-UnifiedAuditLog -StartDate $StartDate -EndDate $EndDate -ResultSize 5000 -SiteIds $SiteIDs -RecordType SharePointFileOperation -Operations $Operations 
    $ConvertAudit = $Audit | Select-Object -ExpandProperty AuditData | ConvertFrom-Json
    $OutputFile0 = ".\UnifiedAuditLog_FULL"+$i+$j+"ALL0.csv"
    $ConvertAudit | Select-Object CreationTime,UserId,Operation,Workload,ObjectID,SiteUrl,SourceFileName,ClientIP,UserAgent | Export-Csv $OutputFile0 -NoTypeInformation -Force -Append
    Write-Host $StartDate `t $Audit.Count
    # File to be attached in email
$attachment = new-object Net.Mail.Attachment("D:\"+$OutputFile0)

# Configure SMTP server
$smtpServer = "smtp.office365.com"
$mailMessage = new-object Net.Mail.MailMessage
$smtpObj = new-object Net.Mail.SmtpClient($smtpServer)

# Set email parameters
$mailMessage.From = "***"
$mailMessage.ReplyTo = "****"
$mailMessage.To.Add("****")
$mailMessage.subject = "[MAIL SUBJECT]"
$mailMessage.body = "[MAIL BODY]"
$mailMessage.Attachments.Add($attachment)

# Send email
$smtpObj.Send($mailMessage)
$attachment.Dispose()
  
  
  
  
  
  }
}
Disconnect-ExchangeOnline

But i will get this exception:-

Exception calling "Send" with "1" argument(s): "Service not available, closing transmission channel. The server
response was: Cannot connect to SMTP server 40.101.76.178 (40.101.76.178:25), connect error 10060"
At line:28 char:1
+ $smtpObj.Send($mailMessage)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : SmtpException

Any advice?

enter image description here

Update-1

Now when i define the port number as follow:-

$smtpObj = new-object Net.Mail.SmtpClient($smtpServer,587)

I will get this error instead:-

Exception calling "Send" with "1" argument(s): "Error in processing. The server response was: 5.7.3 STARTTLS is
required to send mail [VI1P194CA0025.EURP194.PROD.OUTLOOK.COM]"
At line:28 char:1
+ $smtpObj.Send($mailMessage)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : SmtpException

Edit I also tried this:-

Read-Host -Prompt "Enter your tenant password" -AsSecureString | ConvertFrom-SecureString | Out-File "O365.key"

Connect-ExchangeOnline
$SiteIDs = '64898c8f-2d5f-4e0e-9a9b-eb9828975a9e','20e6140c-0441-4988-b36c-c61cf3400847'
$Operations = @('FileAccessed','FileDownloaded','FileDeleted')
$OutputFile = ".\UnifiedAuditLog_FULL.csv"
$Today = Get-Date -Date (Get-Date -Format “yyyy-MM-dd”)
$intDays = 2
$TenantPass = cat "O365.key" | ConvertTo-SecureString
$emailCredential = New-Object System.Net.NetworkCredential("test.user@***.com", $TenantPass)
For ($i=0; $i -le $intDays; $i++){
  For ($j=23; $j -ge 0; $j--){
    $StartDate = ($Today.AddDays(-$i)).AddHours($j)
    $EndDate = ($Today.AddDays(-$i)).AddHours($j + 1)
    $Audit = Search-UnifiedAuditLog -StartDate $StartDate -EndDate $EndDate -ResultSize 5000 -SiteIds $SiteIDs -RecordType SharePointFileOperation -Operations $Operations 
    $ConvertAudit = $Audit | Select-Object -ExpandProperty AuditData | ConvertFrom-Json
    $OutputFile0 = ".\UnifiedAuditLog_FULL"+$i+$j+"ALL0.csv"
    $ConvertAudit | Select-Object CreationTime,UserId,Operation,Workload,ObjectID,SiteUrl,SourceFileName,ClientIP,UserAgent | Export-Csv $OutputFile0 -NoTypeInformation -Force -Append
    Write-Host $StartDate `t $Audit.Count
    
    # File to be attached in email
$attachment = new-object Net.Mail.Attachment("D:\"+$OutputFile0)

# Configure SMTP server
$smtpServer = "smtp.office365.com"
$mailMessage = new-object Net.Mail.MailMessage
$smtpObj = new-object Net.Mail.SmtpClient($smtpServer,587)
$smtpObj.EnableSSl = $true
$smtpObj.Credentials = $emailCredential
# Set email parameters
$mailMessage.From = "test.user@***.com"
$mailMessage.To.add("test.user@***.com")
$mailMessage.subject = "[MAIL SUBJECT]"
#$mailMessage.body = "[MAIL BODY]"
#$mailMessage.Attachments.Add($attachment)

# Send email
$smtpObj.Send($mailMessage)
$attachment.Dispose()
  
  
  
  
  
  }
}
Disconnect-ExchangeOnline

but i got this error:-

Exception calling "Send" with "1" argument(s): "The SMTP server requires a secure connection or the client was not
authenticated. The server response was: 5.7.57 Client not authenticated to send mail. Error: 535 5.7.139
Authentication unsuccessful, the request did not meet the criteria to be authenticated successfully. Contact your
administrator. [VI1P191CA0005.EURP191.PROD.OUTLOOK.COM]"
At line:26 char:1
+ $smtpObj.Send($mailMessage)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : SmtpException

Although the user i am using has SmtpClientAuthenticationDisabled = False, as follow

PS D:\> Get-CASMailbox -Identity test.user@***.com
Name          ActiveSyncEnabled OWAEnabled PopEnabled ImapEnabled MapiEnabled SmtpClientAuthenticationDisabled
----          ----------------- ---------- ---------- ----------- ----------- --------------------------------
test.user@***.com True              True       True       True        True        False
0

There are 0 answers