我正在尝试使用 sap commerce 发送电子邮件。 我已经配置好了配置扩展的
local.properties
mail.smtp.server=smtp.gmail.com
mail.smtp.host=smtp.gmail.com
mail.smtp.port=587
[email protected]
mail.smtp.ssl.protocols=TLSv1.2
[email protected]
mail.smtp.password=********
mail.smtp.starttls.enable=true
mail.smtp.auth=true
但是在执行作业后以及发送电子邮件时会显示警告
电子邮件已发送至 sourour siala
来自电子邮件页面:[电子邮件受保护]
DiscountNotificationEmailContext 初始化
INFO [TaskExecutor-master-21338-ProcessTask [8796928541622]] [GenerateEmailAction] 已生成电子邮件
INFO [TaskExecutor-master-21341-ProcessTask [8796928574390]] [DefaultEmailService] 发送电子邮件 [8796294879296] 至 [[[email protected]]] 来自 [[email protected]] 主题 [我们产品的独家促销 -不要错过! ]
警告 [TaskExecutor-master-21341-ProcessTask [8796928574390]] [DefaultEmailService] 无法发送电子邮件 pk [8796294879296] 主题 [我们产品的独家促销 - 不要错过! ] 原因:将电子邮件发送到以下服务器失败:smtp.gmail.com:587
这是我的工作步骤
我创建了一个“ListFavoritesProcess”模型,用一个属性扩展了“StoreFrontCustomerProcess”
<attribute qualifier="products" type="ProductList">
<persistence type="property" />
<description>Attribute contains the products that will be used in the process</description>
</attribute>
然后我创建了process.xml文件
然后我创建了一个类来启动该过程
public Boolean discountNotificationEmailprocess(final CustomerModel customer, final Set<ProductModel> products)
{
Boolean bool = false;
if ((customer != null) && CollectionUtils.isNotEmpty(products))
{
final ListFavoritesProcessModel listFavoritesProcessModel = getBusinessProcessService()
.createProcess("listFavoritesProcessModel-" + customer.getUid() + "-"System.currentTimeMillis() + "-"+ Thread.currentThread().getId(), "DiscountNotificationEmailProcess");
listFavoritesProcessModel.setCustomer(customer);
listFavoritesProcessModel.setStore(getBaseStoreService().getBaseStoreForUid("electronics"));
listFavoritesProcessModel.setSite(getBaseSiteService().getBaseSiteForUID("electronics"));
listFavoritesProcessModel.setLanguage(getBaseStoreService().getBaseStoreForUid("electronics").getDefaultLanguage());
listFavoritesProcessModel.setCurrency(getBaseStoreService().getBaseStoreForUid("electronics").getDefaultCurrency());
listFavoritesProcessModel.setProducts(new ArrayList<ProductModel>(products));
getModelService().save(listFavoritesProcessModel);
getBusinessProcessService().startProcess(listFavoritesProcessModel);
bool = true;
}
return bool;
}
然后我创建了从 AbstractEmailContext 扩展的上下文
@Override
public void init(final ListFavoritesProcessModel listFavoritesProcessModel, final EmailPageModel emailPageModel)
{
super.init(listFavoritesProcessModel, emailPageModel);
products = new ArrayList<>();
final List<ProductModel> productsModel = listFavoritesProcessModel.getProducts();
productsModel.forEach(productModel -> {
final ProductData productData = getProductFacade().getProductForOptions(productModel,
Arrays.asList(ProductOption.BASIC, ProductOption.PRICE, ProductOption.STOCK, ProductOption.PROMOTIONS));
products.add(productData);
});
put(EMAIL, getCustomerEmailResolutionService().getEmailForCustomer(getCustomer(listFavoritesProcessModel)));
put(DISPLAY_NAME, listFavoritesProcessModel.getCustomer().getName());
put(FROM_EMAIL, Config.getParameter("mail.smtp.user"));
put(FROM_DISPLAY_NAME, "sap");
System.out.println("DiscountNotificationEmailContext init");
}
原因
有时,Google 会禁止访问安全性较低的应用程序或其他应用程序,以保护您的帐户免受潜在漏洞的影响。可以关闭此设置,或者可以为帐户启用两因素身份验证
(recommended)
。
分辨率
In most cases the issue can be resolved by setting up two-step verification on Google.
通过此链接为帐户启用两步验证:Google 两步验证。
通过此链接生成特定密码:Google 特定密码。
在下面的配置中使用生成的特定密码: 邮件.smtp.密码=<"generated specific password">
另请参阅
本地测试电子邮件功能的替代方法:
我今天遇到了同样的问题,尝试使用本地 SMTP 服务器作为中继从我的 Hybris / SAP Commerce Cloud 平台发送电子邮件。
错误消息是: 无法发送电子邮件 pk [1234567788999] 主题 [mysubject] 原因:将电子邮件发送到以下服务器失败:mysmtpserver.com:25
错误是由密码中的特殊字符“#”(井号)引起的。 我必须重置没有 # 字符的邮件中继帐户的密码,它成功了。
希望这能有所帮助。 问候,