Is there a way for Epicor to the login user's email address as the sender when emailing a business document (Quote)

The issue is with emailing business documents such a Quote from the Print/Email/Fax option. For example, when selecting to print a quote, Epicor 10.1.400.38 provides the option to directly email it. The email window is populated with the subject line, EmailTo, EmailCC, and Body. Not there is no field for the EmailFrom. The Quote is submitted, emailed, and received. However, when the received reply back, the generic email address from the Global Alerts setup is defaulted for the email Sender. This email address is a generic email defined to avoid an error message from the field is blank.

If we remove the Global Alert email address defined in Company Maintenance> Email and Reporting> Global Alert From section, Epicor issues an error when we try to email the Quote:

Ideally, we would like to use the User’s email address from the Username profile or contact as the EmailSender. I also reviewed the contents of the Ice.TaskParam table, and examined the list of parameter names and values inserted, but it doesn’t appear that Epicor is using a parameter for the Sender’s email. address.

When the Alert Address is not specified, Epicor will report the Error:
Program Ice.Services.Lib.RunTask raised an unexpected exception with the following message: RunTask: The parameter ‘address’ cannot be an empty string.
Parameter name: address
Stack Trace:
at System.Net.Mail.MailAddress…ctor(String address, String displayName, Encoding displayNameEncoding)
at Ice.Core.SsrsReporting.EmailSender.CreateMessage(EmailActionSettings settings, IEnumerable1 attachmentInfos) in c:\_Releases\ICE\3.1.400.38\Source\Server\Internal\Lib\TaskLib\SsrsReporting\EmailSender.cs:line 36 at Ice.Core.SsrsReporting.EmailSender.Send(EmailActionSettings settings, IEnumerable1 attachmentInfos) in c:_Releases\ICE\3.1.400.38\Source\Server\Internal\Lib\TaskLib\SsrsReporting\EmailSender.cs:line 27
at Ice.Core.SsrsReporting.ReportProcessorBase1.RenderReportForPrintFaxOrEmailReport(RenderedSsrsReport renderedReport, Boolean serverSidePrint, Boolean ignorePageSettings, Boolean ignoreMargins) in c:\_Releases\ICE\3.1.400.38\Source\Server\Internal\Lib\TaskLib\SsrsReporting\ReportProcessorBase.cs:line 447 at Ice.Core.SsrsReporting.ReportProcessorBase1.ProcessReportPart(String reportLocation) in c:_Releases\ICE\3.1.400.38\Source\Server\Internal\Lib\TaskLib\SsrsReporting\ReportProcessorBase.cs:line 161
at Ice.Core.SsrsReporting.StandardReportProcessor1.ProcessReportParts() in c:\_Releases\ICE\3.1.400.38\Source\Server\Internal\Lib\TaskLib\SsrsReporting\StandardReportProcessor.cs:line 36 at Ice.Core.RptBase.ReportSsrsDatabaseBuilder1.ProcessUnroutedReport() in c:_Releases\ICE\3.1.400.38\Source\Server\Internal\Lib\TaskLib\RptBase\ReportSsrsDatabaseBuilder.cs:line 215
at Ice.Core.RptBase.ReportDatabaseBuilder1.XMLClose() in c:\_Releases\ICE\3.1.400.38\Source\Server\Internal\Lib\TaskLib\RptBase\ReportDatabaseBuilder.cs:line 134 at Ice.Core.RptTaskBase1.XMLClose() in c:_Releases\ICE\3.1.400.38\Source\Server\Internal\Lib\TaskLib\RptBase\RptTaskBase.cs:line 134
at Erp.Internal.EQ.QuotForm.RunProcess(Int64 instanceTaskNum, String outputFileName) in c:_Releases\ERP\RL10.1.400.0\Source\Server\Internal\EQ\QuotForm\QuotForm.cs:line 316
at Ice.Hosting.TaskCaller.InnerExecuteTask(IceDataContext newContext) in c:_Releases\ICE\3.1.400.38\Source\Framework\Epicor.Ice\Hosting\TaskCaller\TaskCaller.cs:line 78
at Ice.Hosting.TaskCaller.ExecuteTask(Boolean suppressTransaction) in c:_Releases\ICE\3.1.400.38\Source\Framework\Epicor.Ice\Hosting\TaskCaller\TaskCaller.cs:line 31
at Ice.Lib.RunTask.BpmFriendlyTaskLauncher.Run(String sessionIdPrefix, IceContext db, Action taskRunner) in c:_Releases\ICE\3.1.400.38\Source\Server\Services\Lib\RunTask\BpmFriendlyTaskLauncher.cs:line 63
at Ice.Services.Lib.RunTaskSvc.InnerRunTask(Int64 ipTaskNum, Boolean suppressTransaction) in c:_Releases\ICE\3.1.400.38\Source\Server\Services\Lib\RunTask\RunTask.cs:line 502
at Ice.Services.Lib.RunTaskSvc.InnerRunTask(Int64 ipTaskNum, Boolean suppressTransaction) in c:_Releases\ICE\3.1.400.38\Source\Server\Services\Lib\RunTask\RunTask.cs:line 502
at Ice.Services.Lib.RunTaskSvcFacade.RunTask(Int64 ipTaskNum) in c:_Releases\ICE\3.1.400.38\Source\Server\Services\Lib\RunTask\RunTaskSvcFacade.cs:line 99
at SyncInvokeRunTask(Object , Object[] , Object[] )
at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at Epicor.Hosting.OperationBoundInvoker.InnerInvoke(Object instance, Func2 func) in c:\_Releases\ICE\3.1.400.38\Source\Framework\Epicor.System\Hosting\OperationBoundInvoker.cs:line 59 at Epicor.Hosting.OperationBoundInvoker.Invoke(Object instance, Func2 func) in c:_Releases\ICE\3.1.400.38\Source\Framework\Epicor.System\Hosting\OperationBoundInvoker.cs:line 28
at Epicor.Hosting.Wcf.EpiOperationInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs) in c:_Releases\ICE\3.1.400.38\Source\Framework\Epicor.System\Hosting\Wcf\EpiOperationInvoker.cs:line 23
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
at System.ServiceModel.Dispatcher.ChannelHandler.DispatchAndReleasePump(RequestContext request, Boolean cleanThread, OperationContext currentOperationContext)
at System.ServiceModel.Dispatcher.ChannelHandler.HandleRequest(RequestContext request, OperationContext currentOperationContext)
at System.ServiceModel.Dispatcher.ChannelHandler.AsyncMessagePump(IAsyncResult result)

If you have Advanced Print Routing, you might able to do this, but it will require some changes to the RDD of the Quote. The quote has a ChangedBy field (QuoteHed.ChangedBy). If you add the user table (didn’t take the time to look for it, sorry) to the RDD you can then retrieve the email address of the ChangedBy person and populate it in the Report Style.

However… you will not be able to edit the text of each outgoing email, so you would have to specify whatever text you want sent each time. Then you would print using that report style and it would send automatically with the email address you want.

We have Adv Print Routing, and take advantage of the fact that we make the users E10 ID equal to their domain user ID. Then you can inert the system constant CurrentUserID , immediately followed by a static value for the domain.

image

I am currently using the existing email function

Yeah… The built-in email is pretty limited. Can’t change the From, or specify the attachments name.

Adv Print Routing is handy for some things, but mostly for just automated things. With APR, none of those fields you see (Sunject, To, CC, Body, etc…) are displayed. They are all derived from the data of the item being “printed”. The pict I showed is for the Template of the email. all fields are either static constants (every email contains the same info for the same fields), or is built dynamically at runtime with no user input.

Thanks for the suggestion. It would be useful to know what parameter (see error message) the SSRS report is looking for and how to populate the parameter dynamically.