Thanks to everyone who gave me suggestions. I finally found a solution. ChatGPT provided misleading information—actually, the 'From' field can be modified. Here is the Sieve filter I ultimately used.
require ["editheader", "variables", "copy"];
if true {
if header :matches "From" "*" {
set "original_from" "${0}";
} else {
set "original_from" "unknown@domain.com";
}
deleteheader "Reply-To";
addheader "Reply-To" "${original_from}";
deleteheader "From";
deleteheader "DKIM-Signature";
addheader "From" "Forwarder <forwarder@mydomain.com>";
addheader "X-Original-From" "${original_from}";
redirect "myemail@gmail.com";
keep;
}