Here in this Blog I am showing that how to implement MailProcess application in F#. An Agent is defined in the code for Reading Mail. Here Mail is a normal String which can be read from the Console Application Window.

Example


module
EmailSendingProcedure =

open System

type Msg = string * AsyncReplyChannel<string>
let textStr = "Email {0} was received. Email contents: {1}"
let agent = MailboxProcessor<Msg>.Start(fun mailbox ->
let rec loop x =
async {
let! (message, replyChannel) = mailbox.Receive();
if (message = "Exit") then
replyChannel.Reply("Exitting.")
else
replyChannel.Reply(String.Format(textStr, x, message))
do! loop (x + 1)
}
loop 0)

printfn "Email Sending Process"
printfn "Write Text and Press ENTER to Send a Mail."
printfn "Write 'End' to Exit."

let mutable exit = false
while (not exit) do
printf "> "
let input = Console.ReadLine()
let reply = agent.PostAndReply(fun replyChannel -> input, replyChannel)
if (reply = "Exitting.") then
exit <- true
printfn "Reply: %s" reply
printfn "If you want to continue press ENTER."
Console.ReadLine() |> ignore

Output

MailProcess Example Output