diff --git a/src/lib-sieve/sieve-settings.c b/src/lib-sieve/sieve-settings.c
index e4773d2524c2e210f4fcf7d06809fc09cdf698a1..47f70da4c47c73d151aeb34f9c27679eedd3a566 100644
--- a/src/lib-sieve/sieve-settings.c
+++ b/src/lib-sieve/sieve-settings.c
@@ -216,7 +216,9 @@ void sieve_settings_load(struct sieve_instance *svinst)
 					 &uint_setting))
 		svinst->max_redirects = (unsigned int)uint_setting;
 
-	svinst->max_cpu_time_secs = SIEVE_DEFAULT_MAX_CPU_TIME_SECS;
+	svinst->max_cpu_time_secs =
+		(svinst->env_location == SIEVE_ENV_LOCATION_MS ?
+		 0 : SIEVE_DEFAULT_MAX_CPU_TIME_SECS);
 	if (sieve_setting_get_duration_value(svinst, "sieve_max_cpu_time",
 					     &period)) {
 		if (period > (UINT_MAX / 1000))
diff --git a/src/lib-sieve/sieve.c b/src/lib-sieve/sieve.c
index c353bebf557ced37edce0229071dafdd24601e7c..59ea41766b250449e92a2ddcdea0ac693f2a5342 100644
--- a/src/lib-sieve/sieve.c
+++ b/src/lib-sieve/sieve.c
@@ -1285,6 +1285,8 @@ bool sieve_resource_usage_is_excessive(
 	const struct sieve_resource_usage *rusage)
 {
 	i_assert(svinst->max_cpu_time_secs <= (UINT_MAX / 1000));
+	if (svinst->max_cpu_time_secs == 0)
+		return FALSE;
 	return (rusage->cpu_time_msecs > (svinst->max_cpu_time_secs * 1000));
 }