我知道kentico管理员设置中有选项可以停止发送通知电子邮件。但我想在我的自定义代码中检查这一点。那么请你建议我在哪里可以得到kentico的代码。
答案 0 :(得分:1)
请参阅官方documentation。
您需要使用SettingsKeyInfoProvider
:
SettingsKeyInfoProvider.SetValue("CMSSettingName", "SiteName", value);
如果要全局设置,请忽略站点名称参数。
您要查找的设置名称为CMSStoreSendOrderNotification
和CMSStoreSendPaymentNotification
。
您可以通过查询数据库找到更多设置:
SELECT * FROM [CMS_SettingsKey] where keyname like '%cmsstoresend%'
答案 1 :(得分:1)
如果您希望在发送通知时拦截某个操作,可以使用EmailInfo
对象的全局事件,如下所示:
[assembly: RegisterModule(typeof(GlobalEventsModule))]
public class GlobalEventsModule : Module
{
public GlobalEventsModule() : base (typeof(GlobalEventsModule).Name)
{
}
protected override void OnInit()
{
base.OnInit();
EmailInfo.TYPEINFO.Events.Insert.Before += Insert_Before;
}
private void Insert_Before(object sender, ObjectEventArgs e)
{
// executed before an e-mail is inserted into DB
var email = (EmailInfo)e.Object;
}
}
要取消代码中的执行,您可以调用Cancel()
方法(尽管在这种情况下您可能会遇到异常 - 您必须在自己的方案中自行测试):
private void Insert_Before(object sender, ObjectEventArgs e)
{
var email = (EmailInfo)e.Object;
e.Cancel();
}
仅当您使用电子邮件队列(无论如何强烈推荐)并且将针对所有传出电子邮件执行此操作时,此功能也将有效,而不仅仅是通知。
答案 2 :(得分:1)
使用CMS.Ecommerce库,您可以通过API检查这些设置
SiteInfoIdentifier sii = new SiteInfoIdentifier(SiteContext.CurrentSiteID);
bool sendOrderNotificationEmail = CMS.Ecommerce.ECommerceSettings.SendOrderNotification(sii);
如果要以编程方式设置它们,则必须使用SettingsKeyInfoProvider
SettingsKeyInfoProvider.SetValue("CMSStoreSendOrderNotification ", false);