电子邮件常见问题

WooCommerce和大部分发送电子邮件的插件,通过使用WordPress的核心功能wp_mail()函数来发送邮件。

在大多数情况下,如果没有发送/接收电子邮件,问题不在于WooCommerce本身,而是在您的网络主机上使用的核心电子邮件函数。下面是常见问题的解决方案。

我收到订单,但没有电子邮件发送!

产生的因素可能有多个。在解释实际出现的邮件方面问题前,请确保没有以下描述。

检查您的订单是否处于“待处理”

如果您的新订单处于“待处理”状态,则不会发送任何电子邮件。待处理订单是客户已点击“下单”但未完成付款页面(取决于支付网关,即PayPal)或信用卡交易被拒绝的订单。

如果您有待处理的订单,但是诸如PayPal之类的支付网关已收到付款,则是订单尚未被更新,这可能表示支付网关出现问题。在这种情况下,您没有看到电子邮件的问题;您查找支付网关的问题,可能需要提交支持单

对于“PayPal标准”特有的问题,我们也有相应故障排除页面

在状态发生更改之前,插件也可能会产生错误。要查看是什么原因导致的,您可以通过禁用除WooCommerce本身之外的插件/主题来排除冲突,也可以使用WP调试日志来查看错误。如果发现“fatal errors”,这可能是发生问题所在。

检查您的电子邮件设置

顺利更新为“处理”的订单会发出一封电子邮件。另一个可能的问题是错误地禁用电子邮件发送。仔细检查订单通知里的“启用电子邮件通知”是否勾选。这可以在WooCommerce > 设置 > 电子邮件中找到,然后点击正在处理的订单电子邮件模板。附加的测试应该是将电子邮件类型设置为纯文本

查看是否电子邮件已发送,但未收到

如果启用了电子邮件并且订单更新为“处理中”,则可能会是在向收件人发送电子邮件过程出现问题。这可能是一个垃圾邮件拦截器,将您的电子邮件分类为垃圾邮件并阻止其发送。安装邮件登录插件可以帮助到您。

安装WP Mail Logging plugin。这将记录所有发出的邮件,以便您可以看到发送的内容。一旦安装:

成功发送后的屏幕应该是这样的:

如果电子邮件已发送但未收到,则解决此问题的最佳方法是注册一个专用的SMTP服务商提供的帐户,(一般网站通常可以保留在可用的免费使用帐户中),它将发送电子邮件给您。这应该比您自己的服务器邮件发送功能更可靠。

如果没有发送电子邮件,这可能表明插件冲突阻止了发送,例如错误在之前产生。要看看是什么导致这种情况,您可以通过禁用WooCommerce本身以外的插件/主题来排除冲突,也可以使用WP调试日志查看错误。如果有“致命错误”,这可能发生问题所在。

什么是专用SMTP提供商? 这像我的Gmail帐户吗?

一个专用的SMTP提供商就像一个Web主机,在某种意义上说,你有一个帐户并使用他们的服务器。区别在于,托管网站使用他们的服务器发送电子邮件。Gmail是您发送和接收电子邮件的电子邮件提供商; 一个专用的SMTP提供商类似于半个Gmail,您只发送电子邮件,而不接收它们。

可以使用Gmail作为SMTP提供商吗?

是的,但不是很理想。如果您在24小时内向超过500个不同的收件人发送电子邮件,Gmail将会停用您的帐户。这包括您发送的电子邮件和您网站发送的所有电子邮件。了解更多

建议的专用SMTP提供商

有专门的SMTP提供商将适用于大多数网站。所有在WordPress.org上都有自己的插件,可以从您的WordPress仪表板安装,并提供支持,帮助您开始使用。

电子邮件如何工作?

比较电子邮件到达目的地的路径vs.在公路旅行中开车,电子邮件不是直接从A点到B点 。最终目的地更像点W,电子邮件在每一步被过滤时以光速从一个服务器发到另一个服务器。

谷歌已经把这一路径表示成电子邮件。这专门针对Gmail,并提供给移动设备,但有助于解释电子邮件的工作原理。了解更多

电子邮件如何与WordPress协同工作?

WooCommerce和大多数发送电子邮件的插件一样,通过使用WordPress核心功能的wp_mail()函数来发送邮件。

这是否意味着WordPress发送我的电子邮件?WooCommerce是否发送电子邮件?

都不发送电子邮件。所发生的是WooCommerce会调用wp_mail()函数,然后请求WordPress发送电子邮件。因为WordPress不是电子邮件服务器,它通常要求PHP发送电子邮件。然后,PHP将检查Web服务器中的本地电子邮件服务器,并告知电子邮件服务器发送电子邮件。您的电子邮件通过三个步骤才能到达您的Web服务器。

如果电子邮件传递到我的Web服务器发送,专用SMTP提供商如何适应?

通过使用SMTP提供商可用的插件或Postman SMTP 插件,wp_mail()函数将电子邮件从PHP发送到您的SMTP提供商。从那里,SMTP提供商接收请求,并将您的电子邮件添加到要发送的队列中。

如果邮件被垃圾邮件过滤器阻止,为什么它不在我的垃圾邮件文件夹?

垃圾邮件过滤器是您电子邮件通过的最终的过滤器,它会根据您电邮客户端的设置来处理垃圾邮件或如何将其他电子邮件标记为垃圾邮件。如果您的电子邮件在此之前被另一个垃圾邮件过滤器拒绝,则不会传送 。

我的联系表单邮件工作,为什么WooCommerce电子邮件被阻止?

没有深入查看服务器日志和跟踪精确的邮件路径,这回答起来不会很轻松。

可以在完成的订单和发票电子邮件中添加附件发送已购买的可下载文件吗?

是的! 将此代码段添加到主题的functions.php文件的末尾:

注意:根据我们的支持政策,我们无法为自定义提供支持。如果您不熟悉代码/模板及如何解决潜在的冲突,请选择Woo专家或开发者以获得帮助。
<?php
// Add Downloadable Products to Woocommerce Completed Order & Invoice Emails as Attachments
function woocommerce_emails_attach_downloadables($attachments, $status, $order) {
    if ( ! is_object( $order ) || ! isset( $status ) ) {
        return $attachments;
    }
    if ( empty( $order ) ) {
        return $attachments;
    }
    if ( ! $order->has_downloadable_item() ) {
        return $attachments;
    }
    $allowed_statuses = array( 'customer_invoice', 'customer_completed_order' );
    if ( isset( $status ) && in_array( $status, $allowed_statuses ) ) {
        foreach ( $order->get_items() as $item_id => $item ) {
            foreach ( $order->get_item_downloads( $item ) as $download ) {
                $attachments[] = str_replace( content_url(), WP_CONTENT_DIR, $download['file'] );
            }
        }
    }
    return $attachments;
}
add_filter( 'woocommerce_email_attachments', 'woocommerce_emails_attach_downloadables', 10, 3);
	

我可以调整我的“新订单”电子邮件,以显示我的客户的姓名和电子邮件地址,而不是我自己的?

是的! 将此代码段添加到主题的functions.php文件的末尾:

注意:根据我们的支持政策,我们无法为自定义提供支持。如果您不熟悉代码/模板及如何解决潜在的冲突,请选择Woo专家或开发者以获得帮助。
function custom_use_customer_from_address ( $from_email, $obj ) {
	if ( is_a( $obj, 'WC_Email_New_Order' ) ) {
		$address_details = $obj->object->get_address( 'billing' );
		if ( isset( $address_details['email'] ) && '' != $address_details['email'] ) {
			$from_email = $address_details['email'];
		}
	}
	return $from_email;
}
add_filter( 'woocommerce_email_from_address', 'custom_use_customer_from_address', null, 2 );

function custom_use_customer_from_name ( $from_name, $obj ) {
	if ( is_a( $obj, 'WC_Email_New_Order' ) ) {
		$address_details = $obj->object->get_address( 'billing' );
		if ( isset( $address_details['first_name'] ) && '' != $address_details['first_name'] ) {
			$from_name = $address_details['first_name'];
		}
		if ( isset( $address_details['last_name'] ) && '' != $address_details['last_name'] ) {
			$from_name .= ' ' . $address_details['last_name'];
		}
	}
	return $from_name;
}
add_filter( 'woocommerce_email_from_name', 'custom_use_customer_from_name', null, 2 );
	

资源

SenderScore by ReturnPath

如果您有自己的专用服务器发送电子邮件,请检查并监视您的网站的信誉,及发送电子邮件的IP地址。您还可以将其用于共享和虚拟主机环境,但最好是使用专用的SMTP提供商,因为主机环境不推荐用于发送电子邮件。访问Senderscore.org了解更多信息。

翻译不准确?

到QQ群里吐槽:

WooCommerce + WordPress开发