Upgrade e-mail config
This commit is contained in:
parent
5d431b81c7
commit
41c3904e85
|
@ -14,6 +14,7 @@ RUN dotnet restore
|
|||
COPY . ./
|
||||
WORKDIR /jjj/JobsJobsJobs/Application
|
||||
RUN dotnet publish -c Release -r linux-x64
|
||||
RUN rm bin/Release/net7.0/linux-x64/publish/appsettings.*.json
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/aspnet:7.0-alpine as final
|
||||
WORKDIR /app
|
||||
|
|
|
@ -59,6 +59,9 @@ let main args =
|
|||
opts.Cookie.HttpOnly <- true
|
||||
opts.Cookie.IsEssential <- true)
|
||||
|
||||
let emailCfg = cfg.GetSection "Email"
|
||||
if (emailCfg.GetChildren >> Seq.isEmpty >> not) () then ConfigurationBinder.Bind(emailCfg, Email.options)
|
||||
|
||||
let app = builder.Build ()
|
||||
|
||||
// Unify the endpoints from all features
|
||||
|
|
|
@ -3,17 +3,41 @@ module JobsJobsJobs.Email
|
|||
open System.Net
|
||||
open JobsJobsJobs.Domain
|
||||
open MailKit.Net.Smtp
|
||||
open MailKit.Security
|
||||
open MimeKit
|
||||
|
||||
/// Options to use when sending e-mail
|
||||
type EmailOptions() =
|
||||
/// The hostname of the SMTP server
|
||||
member val SmtpHost : string = "localhost" with get, set
|
||||
|
||||
/// The port over which SMTP communication should occur
|
||||
member val Port : int = 25 with get, set
|
||||
|
||||
/// Whether to use SSL when communicating with the SMTP server
|
||||
member val UseSsl : bool = false with get, set
|
||||
|
||||
/// The authentication to use with the SMTP server
|
||||
member val Authentication : string = "" with get, set
|
||||
|
||||
/// The e-mail address from which messages should be sent
|
||||
member val FromAddress : string = "nobody@noagendacareers.com" with get, set
|
||||
|
||||
/// The name from which messages should be sent
|
||||
member val FromName : string = "Jobs, Jobs, Jobs" with get, set
|
||||
|
||||
|
||||
/// The options for the SMTP server
|
||||
let mutable options = EmailOptions ()
|
||||
|
||||
/// Private functions for sending e-mail
|
||||
[<AutoOpen>]
|
||||
module private Helpers =
|
||||
|
||||
/// Create an SMTP client
|
||||
let smtpClient () = backgroundTask {
|
||||
let createClient () = backgroundTask {
|
||||
let client = new SmtpClient ()
|
||||
do! client.ConnectAsync ("localhost", 25, SecureSocketOptions.None)
|
||||
do! client.ConnectAsync (options.SmtpHost, options.Port, options.UseSsl)
|
||||
do! client.AuthenticateAsync (options.FromAddress, options.Authentication)
|
||||
return client
|
||||
}
|
||||
|
||||
|
@ -24,13 +48,19 @@ module private Helpers =
|
|||
msg.To.Add (MailboxAddress (Citizen.name citizen, citizen.Email))
|
||||
msg.Subject <- subject
|
||||
msg
|
||||
|
||||
|
||||
/// Send a message
|
||||
let sendMessage msg = backgroundTask {
|
||||
use! client = createClient ()
|
||||
let! result = client.SendAsync msg
|
||||
do! client.DisconnectAsync true
|
||||
return result
|
||||
}
|
||||
|
||||
/// Send an account confirmation e-mail
|
||||
let sendAccountConfirmation citizen security = backgroundTask {
|
||||
let token = WebUtility.UrlEncode security.Token.Value
|
||||
use! client = smtpClient ()
|
||||
use msg = createMessage citizen "Account Confirmation Request"
|
||||
let token = WebUtility.UrlEncode security.Token.Value
|
||||
use msg = createMessage citizen "Account Confirmation Request"
|
||||
|
||||
let text =
|
||||
[ $"ITM, {Citizen.name citizen}!"
|
||||
|
@ -57,14 +87,13 @@ let sendAccountConfirmation citizen security = backgroundTask {
|
|||
use msgText = new TextPart (Text = text)
|
||||
msg.Body <- msgText
|
||||
|
||||
return! client.SendAsync msg
|
||||
return! sendMessage msg
|
||||
}
|
||||
|
||||
/// Send a password reset link
|
||||
let sendPasswordReset citizen security = backgroundTask {
|
||||
let token = WebUtility.UrlEncode security.Token.Value
|
||||
use! client = smtpClient ()
|
||||
use msg = createMessage citizen "Reset Password for Jobs, Jobs, Jobs"
|
||||
let token = WebUtility.UrlEncode security.Token.Value
|
||||
use msg = createMessage citizen "Reset Password for Jobs, Jobs, Jobs"
|
||||
|
||||
let text =
|
||||
[ $"ITM, {Citizen.name citizen}!"
|
||||
|
@ -90,5 +119,5 @@ let sendPasswordReset citizen security = backgroundTask {
|
|||
use msgText = new TextPart (Text = text)
|
||||
msg.Body <- msgText
|
||||
|
||||
return! client.SendAsync msg
|
||||
return! sendMessage msg
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<Nullable>enable</Nullable>
|
||||
<DebugType>embedded</DebugType>
|
||||
<GenerateDocumentationFile>false</GenerateDocumentationFile>
|
||||
<AssemblyVersion>3.1.1.0</AssemblyVersion>
|
||||
<FileVersion>3.1.1.0</FileVersion>
|
||||
<AssemblyVersion>3.1.2.0</AssemblyVersion>
|
||||
<FileVersion>3.1.2.0</FileVersion>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
Loading…
Reference in New Issue
Block a user