我正在使用面向互联网的Lightswitch
HTML“创建新数据”屏幕,供人们将作业应用程序数据提交到数据库中.当他们按下“保存”按钮时,数据会保存,但申请人无法判断他们的数据是否已保存.数据输入屏幕就消失了.有没有办法通过弹出消息框,发送电子邮件或两者同时通知申请人他们的申请被收到? 最佳答案 是的,一旦数据插入系统,就可以发送电子邮件.首先要做的是创建2个表(对于这个例子,在SQL中编写错误,但在表中使用LightSwitch构建也可以)
第1步 – 创建控制电子邮件的数据表
CREATE TABLE Setting (SettingID INT IDENTITY (1,1) NOT NULL,
SettingName VARCHAR(11),
SettingValue VARCHAR(5))
ALTER TABLE Setting ADD CONSTRAINT SettingID_PK PRIMARY KEY (SettingID)
CREATE TABLE Message (MessageID INT IDENTITY (1,1) NOT NULL,
NameFrom VARCHAR (100), --EMAIL SERVER NAME
EmailFrom VARCHAR (100), --EMAIL A
NameTo VARCHAR (100), --SUBJECT
EmailTo VARCHAR (100), -- EMAIL B
EmailMessage VARCHAR (1500), --MESSAGE
EmailCreated DATETIMEOFFSET)
ALTER TABLE Message ADD CONSTRAINT MessageID_PK PRIMARY KEY (MessageID)
--INSERT THIS INTO SETTINGS TO ALLOW THE SYSTEM TO SEND EMAILS
INSERT INTO SETTING VALUES ('SendEmails', 'true')
步骤2 – 编辑“服务器”节点下的Web.config文件
在Web.config文件中的应用程序名称下,在这两行下面添加以下代码(通常在第25-30行之间):
<add key="ApplicationCulture" value="en-US" />
<add key="Microsoft.LightSwitch.DefaultClientName" value="HTMLClient" />
代码:
<add key="SMTPSendingName" value="MAIL HEADER" />
<add key="SMTPSendingEmailAddress" value="EMAIL TO SEND CONFIRMATION FROM" />
<add key="SMTPServer" value="mail.YOURSERVER.com" />
<add key="SMTPUserID" value="" />
<add key="SMTPPassword" value="" />
<add key="SMTPPort" value="25" />
<add key="SMTPSSL" value="false" />
第3步 – 在数据源中创建MailHelper.cs文件(如下所示):
并添加此代码(确保添加引用文件并将“复制本地”设置为True:
using System.Net;
using System.Net.Mail;
using System.Configuration;
using System;
namespace LightSwitchApplication.DataSources.ProjectHandlerThreeData
{
internal class MailHelper
{
public SmtpClient objSmtpClient { get; set; }
private string _SMTPSendingEmailAddress { get; set; }
private string _SMTPServer { get; set; }
private string _SMTPUserId { get; set; }
private string _SMTPPassword { get; set; }
private int _SMTPPort { get; set; }
private bool _SMTPSSL { get; set; }
private string _MailFromName { get; set; }
private string _MailToEmail { get; set; }
private string _MailToName { get; set; }
private string _MailSubject { get; set; }
private string _MailBody { get; set; }
public MailHelper(
string SendFromName, string SendToEmail,
string SendToName, string Subject,
string Body)
{
_MailFromName = SendFromName;
_MailToEmail = SendToEmail;
_MailToName = SendToName;
_MailSubject = Subject;
_MailBody = Body;
_SMTPSendingEmailAddress = Convert.ToString(ConfigurationManager.AppSettings["SMTPSendingEmailAddress"]);
_SMTPServer = Convert.ToString(ConfigurationManager.AppSettings["SMTPServer"]);
_SMTPUserId = Convert.ToString(ConfigurationManager.AppSettings["SMTPUserID"]);
_SMTPPassword = Convert.ToString(ConfigurationManager.AppSettings["SMTPPassword"]);
_SMTPPort = Convert.ToInt32(ConfigurationManager.AppSettings["SMTPPort"]);
_SMTPSSL = Convert.ToBoolean(ConfigurationManager.AppSettings["SMTPSSL"]);
objSmtpClient = new SmtpClient(_SMTPServer, _SMTPPort);
}
public void SendMail()
{
MailMessage mail = new MailMessage();
System.Net.Mail.MailAddress mailFrom =
new System.Net.Mail.MailAddress(_SMTPSendingEmailAddress, _MailFromName);
System.Net.Mail.MailAddress mailTo =
new System.Net.Mail.MailAddress(_MailToEmail, _MailToName);
var _with1 = mail;
_with1.From = mailFrom;
_with1.To.Add(mailTo);
_with1.Subject = _MailSubject;
_with1.Body = _MailBody;
objSmtpClient.EnableSsl = _SMTPSSL;
objSmtpClient.Credentials =
new NetworkCredential(_SMTPUserId, _SMTPPassword);
objSmtpClient.SendAsync(mail, mail.To);
}
}
}
第4步 – 向Message表添加代码(打开Messages表,单击屏幕顶部的Write Code按钮,然后选择Messages_Inserted
现在添加以下代码:
try
{
var EmailSetting = Settings.Where(x => x.SettingName == "SendEmails").FirstOrDefault();
if (EmailSetting != null)
{
if (EmailSetting.SettingValue.ToLower() == "true")
{
string strSubject = "MAIL HEADER";
string strMessage = String.Format("{0}",
"TEXT AT TOP OF EMAIL IF REQUIRED")
+ Environment.NewLine + Environment.NewLine;
strMessage = strMessage + String.Format("{0}",
entity.EmailMessage) + Environment.NewLine;
// Create the MailHelper class created in the Server project.
MailHelper mailHelper =
new MailHelper(
entity.NameFrom,
entity.EmailTo,
entity.NameTo,
strSubject,
strMessage);
// Send Email
mailHelper.SendMail();
}
else
{
}
}
else
{
}
}
catch (Exception ex)
{
}
并检查这些引用是否在顶部:
using System.Configuration;
using System.Net.Mail;
using LightSwitchApplication.DataSources.YOURDATASOURCE;
最后,将此代码添加到代码的INSERTED部分的表中,如上面的消息表
//email a save receipt to the person who added the data
Message objMessage = new Message();
objMessage.NameFrom = Convert.ToString(ConfigurationManager.AppSettings["SMTPSendingName"]);
objMessage.EmailFrom = Convert.ToString(ConfigurationManager.AppSettings["SMTPSendingEmailAddress"]);
objMessage.NameTo = "Details Successfully Saved"; //SUBJECT
objMessage.EmailTo = "emailto@email.com";
objMessage.EmailMessage =
string.Format("The Following User has successfully been Added: " +
"\nErrorID: " + entity.ErrorID +
"\nBy User: " + entity.StaffTable.Staffname +
"\nDate Reported:" + DateTime.Now.ToString(" dd.MM.yy") +
"\n\nError Details: " + entity.Message);
我已将上面的代码留在错误信息中,以显示如何格式化电子邮件并显示更多信息.我希望这有帮助:)如果有任何错误让我知道并且帮助解决它,它很可能是我错过的汇编参考.
多一点
在添加屏幕上,如果您使用的是JavaScript验证,请确保添加此代码:
在屏幕上创建事件,添加此代码.这将禁用已激活的CTRL S功能. (每个屏幕都需要这样):
myapp.AddEditScreen.created = function (screen) {
$(window).one("pagechange", function (e, data) {
var $page = $("#" + screen.details._pageId);
var $button = $page.find(".msls-save-button");
$button.removeClass("msls-save-button");
});
};
其次,将其添加到任何变量(单击编辑PostRender代码).此代码将隐藏默认的保存,删除,取消按钮,因此您的验证无法进行双向分配
$("[data-ls-tap='tap:{data.shell.discardCommand.command}']").hide();
$("[data-ls-tap='tap:{data.shell.saveCommand.command}']").hide();
$("[data-ls-tap='tap:{data.shell.okCommand.command}']").hide();
$("[data-ls-tap='tap:{data.shell.cancelCommand.command}']").hide();
来自此处的邮件原始代码(示例项目也可以下载):
http://lightswitchhelpwebsite.com/Blog/tabid/61/EntryId/2224/Sending-Asynchronous-Emails-Using-LightSwitch-HTML-Client.aspx