Adam Automatorn
hatar det eller älskar det; e-post finns överallt. Protokollet för att flytta det e-postmeddelandet överallt är SMTP, och SMTP – ”routrarna” är SMTP-reläer.
konfigurera SMTP-reläer varierar mellan olika system, men om du har Office 365 som e-postleverantör är dina alternativ begränsade. Installationen kan vara komplicerad och felbenägen, särskilt för enheter som inte är TLS-kapabla.
Observera att sändning av e-post via Office 365 inte kräver ett SMTP-relä. Du kan låta klienter skicka e-post direkt till Office 365 utan att lägga till ett SMTP-relä som inte kräver några konfigurationsändringar. Om du vill veta vad de är läser du hur du skickar Office 365 direct Send/SMTP Client Submission Email (PowerShell).
Innehållsförteckning
förutsättningar
dessa är kraven innan du kan fortsätta.
- en Office 365-prenumeration. Om du inte har detta ännu kan du registrera dig för ett Office 365 e5-provabonnemang.
- en Windows 10-dator med PowerShell v5.1
- en offentlig statisk IP-adress. Du kan fortfarande skapa ett SMTP-relä i Office 365 även utan detta, men du kanske inte testar.
- TCP-port 25 åtkomst från en klient till din Office MX-slutpunkt
- ett giltigt SSL-certifikat. Detta certifikat kan vara ett jokertecken certifikat (t.ex. *.yourdomain.com) utfärdat av certifikatmyndigheter från tredje part som LetsEncrypt, Digicert, etc. Observera att du inte kan använda självsignerade certifikat eller certifikat som utfärdats av en intern PKI eftersom de inte stöds. (krävs endast för TLS-anslutningar)
om du vill konfigurera ett SMTP-relä måste du först skapa en kontakt i Office 365 för att acceptera SMTP-transaktioner. Denna kontakt kommer att få SMTP-relätransaktioner från applikationen eller enheten.
innan du försöker skapa en kontakt, se till att ditt konto har rätt Exchange Online-behörigheter. Se till att ditt konto är medlem i Organisationshanteringsgruppen.
det finns två sätt att skapa en kontakt. Du kan antingen använda Exchange Admin Center eller PowerShell. Båda alternativen utför samma uppgift. Det är upp till dig vilken du ska använda. I den här artikeln kommer vi att täcka båda. Vi täcker också att skapa både icke-TLS-och TLS-kontakter.
skapa en icke-TLS-kontakt med Exchange Admin Center
låt oss börja med att skapa en icke-TLS-kontakt. Du lär dig först hur du gör detta via Exchange Admin Center. Du kan konfigurera många Office 365 SMTP-inställningar i Exchange Admin Center.
När du är inloggad klickar du på mail flow (1) –> connectors (2) –> New (3). Det nya anslutningsfönstret kommer att dyka upp.
i fönstret Nytt kontaktdon väljer du från: organisationens e-postserver (1) och väljer till: Office 365 (2), klicka på Nästa (3).
i nästa fönster anger du namnet SMTP Relay (Non-TLS) eller väljer ditt eget namn (1), skriv in beskrivningen Acceptera relä från lokal SMTP-server (2), avmarkera behåll interna Exchange-e-posthuvuden (rekommenderas) (3) och klicka på nästa (4).
i nästa fönster väljer du genom att verifiera att IP-adressen för den sändande servern matchar en av dessa IP-adresser som tillhör din organisation (1) och klicka på Lägg till (2).
i det nya popup-fönstret skriver du in din offentliga IP-adress (1) och klicka sedan på OK (2). Detta borde ta dig tillbaka till föregående fönster.
kontrollera att IP-adressen läggs till i listan (1), Klicka sedan på nästa (2).
då ser du sammanfattningen av de ändringar som du behöver implementera. Arbeta med nödvändiga förändringar först. Om det inte finns någon kan du gå vidare och klicka på Spara.
tillbaka i Exchange Admin Center kan du nu bekräfta att den nya kontakten har skapats.
Du bör nu ha en icke-TLS-kontakt skapad.
skapa en TLS-kontakt med Exchange Admin Center
att skapa en TLS-kontakt liknar att skapa en icke-TLS-kontakt. Liksom hur du skapade en icke-TLS-kontakt, gå tillbaka till guiden Ny kontakt och använd samma e-postflödesscenario. Jag använder ett A-kontaktnamn på SMTP-relä (icke-TLS) men din kan variera.
i fönstret för att definiera Office 365 ska identifiera e-post från din e-postserver väljer du:
- genom att verifiera att ämnesnamnet på certifikatet som den sändande servern använder för att autentisera med Office 365 matchar detta domännamn (rekommenderas) (1)
- skriv sedan in ämnet för SSL-certifikatet (2)
- och klicka på Nästa (3).
återigen ser du en sammanfattning nödvändiga förändringar. Arbeta med dem först innan du bearbetar. Om det inte finns någon kan du klicka på Spara-knappen direkt.
skapa en icke-TLS-kontakt med PowerShell
om du inte skapar Office 365-kontakter via ett GUI kan du alltid skapa dem via PowerShell också. För att göra det, se först till att du är ansluten till Exchange Online PowerShell.
för att skapa kontakten måste du köra kommandot New-InboundConnector
. Detta kommando kräver några olika parametrar så jag ställer in dessa parametrar i förväg med PowerShell splatting.
Jag har lagt till några kommentarer i själva koden nedan men här är en uppdelning av varje parameter och vad den används för:
- namn – det här är namnet på kontakten.
- ConnectorType-det här är typen av kontakt. Detta värde kan vara
OnPremises
ellerPartner
. I detta scenario är lämplig typOnPremises
. - SenderDomains-detta kan vara en lista över de tillåtna avsändardomänerna. Endast verifierade domäner för din hyresgäst är giltiga val. Asterisken (
*
) betyder att du tillåter alla dina verifierade domäner att vidarebefordra meddelanden med den här kontakten. Om du bara behöver tillåta vissa avsändardomäner ändrar du detta värde till en matris med domänerna. (t.ex.'domain1.com','domain2.com'
) - SenderIPAddresses – det här är din offentliga IP-adress. Glöm inte att ändra detta före körning.
- RestrictDomainsToIPAddresses-när detta värde är inställt på
$true
, indikerar det att denna kontakt endast accepterar e-postmeddelanden från avsändaradresser som kommer från din tillåtna offentliga IP-adress.
$splat = @{ ## Define the name of the connector. Name = 'SMTP Relay' ## Defined the type of connector to create. ConnectorType = 'OnPremises' ## The set of sender domains allowed to relay. SenderDomains = '*' ## Change this to your actual public IP address. SenderIPAddresses = '110.x.x.x' ## Restrict the email relay only to your sender domains and sender IP address RestrictDomainsToIPAddresses = $true}## Create the connectorNew-InboundConnector @splat
När du kör, bör du se något liknande nedan.
skapa en TLS-kontakt med PowerShell
förutsatt att du är ansluten, kör koden nedan för att skapa en TLS-kontakt med PowerShell också. Du kan se nedan många parametrar är identiska med att skapa en icke-TLS-kontakt. De nödvändiga parametrarna som skiljer sig från att skapa en icke-TLS-kontakt är:
- RequireTLS – detta anger att alla meddelanden som tas emot av denna kontakt kräver TLS – överföring
- TlsSenderCertificateName-detta är namnet (eller ämnet) för certifikatet som används av avsändaren.
$splat = @{ ## Define the name of the connector. Name = 'SMTP Relay (TLS)' ## The type of connector to create. ConnectorType = 'OnPremises' ## The set of sender domains allowed to relay. SenderDomains = '*' ## Require TLS RequireTLS = $true ## Subject/Name of the SSL certificate TlsSenderCertificateName = '*.YourDomain.com'}## Create the connectorNew-InboundConnector @splat
kör ovanstående kod och ha en TLS-kontakt skapad och redo att ta emot e-post.
testa Office 365 SMTP Relay Connector med PowerShell
När du har skapat kontakten, Förbered dig för att testa den. Det enklaste sättet att göra det är att använda PowerShell. I det här avsnittet skapar vi några PowerShell-skript så att du enkelt kan se till att kontakten fungerar korrekt.
innan du börjar testa, först se till att du vet vad MX endpoint URL är för din Exchange Online-domän. Om du inte vet hur du hittar din MX-SLUTPUNKTSADRESS loggar du in på Administratörsportalen Office 365. Klicka på Setup, välj Domäner, klicka på domännamnet och kopiera MX-punkterna till adress eller värde.
testa ett icke-TLS SMTP-relä (IP-adress)
Obs: Denna testning måste göras från datorn vars offentliga IP-adress är tillåten i Office 365 SMTP relay setup.
använd PowerShell-koden nedan för testning. Var noga med att ändraFrom
To
ochSmtpServer
parametervärden för att använda dina egna Office 365 SMTP-reläinställningar innan du kör det.
-
To
– måste innehålla en intern domänmottagare och en extern domänmottagare. Glöm inte att ändra dessa värden till dina egna. -
From
– måste ändras till din nominerade avsändaradress. Domändelen av e-postadressen måste vara en av din hyresgästs e-postdomäner. -
SmtpServer
– måste ändras till din Office 365-hyresgästens MX-slutpunkt.
$mailParams = @{ SmtpServer = '<tenant>.mail.protection.outlook.com' Port = '25' From = '' To = '','' Subject = ('SMTP Relay - ' + (Get-Date -Format g)) Body = 'This is a test email using SMTP Relay' DeliveryNotificationOption = 'OnFailure','OnSuccess'}Send-MailMessage @mailParams
testa ett TLS SMTP-relä (certifikat)
Obs! Du måste ha det offentliga SSL-certifikatet i PFX-format innan du kan fortsätta med detta test.
eftersom TLS SMTP-reläet kräver ett certifikat kan du inte använda Send-MailMessage
PowerShell cmdlet eftersom det inte tillåter dig att välja ett specifikt certifikat. Använd istället två. Net-objekt som heter System. Net.Mail.SmtpClient för att definiera SMTP-parametrarna och System.Net.Mail.MailMessage för att komponera meddelandet.
nedan hittar du ett PowerShell-kodavsnitt som du kan använda för att testa TLS SMTP-reläet. Glöm inte att ändra pfxFile
pfxPass
From
To
och SmtpServer
värden för att använda Office 365 SMTP reläinställningar innan du kör det.
# specify the full path of your PFX certificate$pfxFile = "C:\Certificate\cert.pfx"$pfxPass = '<cert password here>'$pfxBytes = Get-Content -path $pfxFile -encoding Byte -ErrorAction:SilentlyContinue$X509Cert = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Certificate2$X509Cert.Import(]$pfxBytes, $pfxPass,"Exportable,PersistKeySet")# Build SMTP properties$smtpServer = '<tenant>.mail.protection.outlook.com'$smtpPort = '25'$smtp = New-Object Net.Mail.SmtpClient($smtpServer,$smtpPort)$smtp.ClientCertificates.Add($X509Cert)$smtp.EnableSSL = $true# Compose message$emailMessage = New-Object System.Net.Mail.MailMessage$emailMessage.From = ''$emailMessage.To.Add('')$emailMessage.To.Add('')$emailMessage.Subject = ('SMTP Relay (TLS) - ' + (Get-Date -Format g))$emailMessage.Body = 'This is a test email using SMTP Relay (TLS)'# Send the message$smtp.Send($emailMessage)
om inställningen av TLS-kontakten är korrekt ska mottagarna definiera via Add()
– metoden Ta emot testmeddelandet.
validera SMTP-Relähoppar med meddelandehuvudet
nu har du ett funktionellt SMTP-relä konfigurerat med en lokal server och Office 365 SMTP-relä. Alla tester lyckades och dina enheter kan skicka meddelanden till både interna och externa mottagare. Bra jobbat!
Om du fortfarande är i tvivel och behöver bekräfta om dessa meddelanden går igenom Office 365 SMTP-reläet kan du granska meddelandehuvudena på de mottagna e-postmeddelandena.
Obs: öppna meddelandehuvudena varierar mellan olika e-postklienter. Exemplet nedan är specifikt för Gmail.
Öppna e-postmeddelandet i Gmail-gränssnittet, öppna meddelandet och klicka på de tre vertikala punkterna (1) och klicka sedan på Visa original (2).
en ny sida visar e-postmeddelandehuvudena. Klicka på Kopiera till Urklipp (1).
öppna en ny webbläsarflik och navigera till https://testconnectivity.microsoft.com/.
gå till fliken Message Analyzer (1), klistra in kopierade data i rutan (2) och klicka på Analysera rubriker (3).
resultatet av analysen visas i tabellen som visas nedan.
Du bör se följande arbetsflöde i resultaten ovan:
- IP-adress 192.168.0.3 anger datorns ursprung.
- On-prem SMTP relay server fick meddelandet.
- Exchange Online Protection (EOP) mottog meddelandet.
- Exchange Online server och omdirigeras för utgående leverans fick meddelandet.
- Office 365 till google.com levererade meddelandet.
baserat på analysresultaten kan du bekräfta att meddelandet passerade genom Office 365 SMTP-reläet som avsett.
sammanfattning
i den här artikeln har du lärt dig hur du skapar ett TLS-och icke-TLS Office 365 SMTP-relä. Du lärde dig också hur du testar och bekräftar deras funktionalitet med olika tekniker och hur du validerar de SMTP-rutter som meddelandet hade passerat.
Leave a Reply