If a program has no IO it can be reduced to not running a program at all (not counting side effects like the CPU getting warmer... but I don't think we'd count that as a property of the program itself).
Thats a difference between the theory and practice. In practice you always have to consider physics. There are always inputs and outputs.
Except if you count static parameter to not be an input, then you have a static output which is basically a constant. Compiler may in fact try to transform it into a constant and if you don’t do anything with it, well, it’ll probably be marked as unused and not even embedded in your binary.
Is the email an output, or a side-effect?
But you're discussing semantics here while it's obvious side effects mean different things in different contexts so the conversation won't get very productive.