Requirement
Send Email Through X++/Code in D365/AX7
Prerequisites
- A valid SMTP mail server
- A valid SMTP port number
- A valid user name & password
Steps
- Go to System administration – Setup – Email – Email Parameters. Configure the SMTP settings as per below screens.
2. Sample Code
Filename fileName = "AbcTest.pdf"; SrsReportRunController controller = new SrsReportRunController(); SRSPrintDestinationSettings settings; Array arrayFiles; System.Byte[] reportBytes = new System.Byte[0](); SRSProxy srsProxy; SRSReportRunService srsReportRunService = new SrsReportRunService(); Microsoft.Dynamics.AX.Framework.Reporting.Shared.ReportingService.ParameterValue[] parameterValueArray; Map reportParametersMap; SRSReportExecutionInfo executionInfo = new SRSReportExecutionInfo(); ; controller.parmReportName(ssrsReportStr(VendBaseData, Report)); controller.parmShowDialog(false); controller.parmLoadFromSysLastValue(false); // Provide printer settings settings = controller.parmReportContract().parmPrintSettings(); settings.printMediumType(SRSPrintMediumType::File); settings.fileName(fileName); settings.fileFormat(SRSReportFileFormat::PDF); // Below is a part of code responsible for rendering the report controller.parmReportContract().parmReportServerConfig(SRSConfiguration::getDefaultServerConfiguration()); controller.parmReportContract().parmReportExecutionInfo(executionInfo); srsReportRunService.getReportDataContract(controller.parmreportcontract().parmReportName()); srsReportRunService.preRunReport(controller.parmreportcontract()); reportParametersMap = srsReportRunService.createParamMapFromContract(controller.parmReportContract()); parameterValueArray = SrsReportRunUtil::getParameterValueArray(reportParametersMap); srsProxy = SRSProxy::constructWithConfiguration(controller.parmReportContract().parmReportServerConfig()); // Actual rendering to byte array reportBytes = srsproxy.renderReportToByteArray(controller.parmreportcontract().parmreportpath(),parameterValueArray,settings.fileFormat(),settings.deviceinfo()); // You can also convert the report Bytes into an xpp BinData object if needed container binData; Binary binaryData; System.IO.MemoryStream mstream = new System.IO.MemoryStream(reportBytes); binaryData = Binary::constructFromMemoryStream(mstream); if(binaryData) { binData = binaryData.getContainer(); } System.Byte[] binData1; System.IO.Stream stream1; // Turn the Bytes into a stream for(int i = 0; i < conLen(binData); i++) { binData1 = conPeek(binData,i+1); stream1 = new System.IO.MemoryStream(binData1); } var messageBuilder = new SysMailerMessageBuilder(); messageBuilder.addTo('myemail@email.com') .setSubject("Fun") .setBody("Fun"); messageBuilder.setFrom('noreply@yourdomain.in'); if (stream1 != null) { messageBuilder.addAttachment( stream1, 'abcd.pdf'); } SysMailerFactory::getNonInteractiveMailer().sendNonInteractive(messageBuilder.getMessage());