Default load spec for RS232 is > 3k, so 15V can deliver 5mA, as a driver. You need a driver series element that allows that, but limits energy from 48V
I used a parallel output discrete solution for a driver, described below.
A LED current driver like NSI50010YT1G limits to ~10mA up to 50V, whilst dropping about 500mV at 5mA
Two of those in series, with two 14V series zeners, will limit the intrusion to 10mA/15V worst case, and be ok to +/- 65V
I recently took some LED bulbs apart to diagnose why they are failing and found those little LED ballasts. The datasheets say they shut down at high temperature, so could be an improvement over depletion mode MOSFETs. One LED ballast could be used inside of a diode bridge with only one more diode drop, although this applies to any DC solution.
Depletion mode mosfets have less control on current, and adding series resistors gives more voltage drop.
The resistance value can be pretty low compared to the driver impedance and depletion mode MOSFETs can be sized for continuous overload.
Well, let's see. Standard mitigations apply:
- Fuse (including of PTC type, polymer or ceramic) and TVS (esp. SIDAC type)
- Series resistor and clamp (as above schematic, but mind the voltage range better, as noted at the end)
- Current limiter, especially back-to-back depletion MOS, or CCSs + diode bridge for high bandwidth (ref: old Tektronix sampler input stages)
- AC/DC (MOS) type SSR + window comparator, turn it off when out of range (still needs a TVS or whatever to handle overvoltage/current before switch opens, some ~ms)
- Custom interface: receiver could be constructed from resistors and a comparator; transmitter could use discrete transistors to achieve much higher power dissipation and voltage range while meeting specs.
The diode bridge is really good for high bandwidth, but also works fine at slow speeds. I like back-to-back depletion mode MOSFETs, which can be sized to handle continuous overloads, or one depletion mode MOSFET inside of a diode bridge for AC. The last time I did this, I used a discrete driver, see below.
Mind, there is of course no such thing as a controller, just add external transistors, to pull off that last one. Like, even given the analog experience I have, I would consider that more of a last resort. Mainly / mostly / worstly because, making your own, the output slew rate, and feed-forward of internal switching noise, are not so well controlled, making it an EMI wildcard. And it needs to be proven out over temperature, and it still takes more parts, more idle power consumption (and you need a +/-15V converter, not just a charge pump -- well, maybe, but either way it's not going to be integrated in a handy MAX232, eh?), etc. Which is all testing I know how to do, and can do right here for that matter, and, YMMV of course, but needless to say it's going to be way more work than just... like... at that point, not even fuckin' using RS-232 anymore, right? 
I needed an RS-232 level shifter some time ago to convert from a USB dongle to true RS-232 levels but since the signal was not inverted, no IC would work. I could have added another inverter, but instead made a discrete transistor design with current source outputs and a parallel termination. The compliance voltage limited the output voltage. The level shifter was basically a TTL input stage driving a x1 current mirror, with another x2 current mirror pulling down, so not very power efficient.
It worked *great*, with better than textbook RS-232 waveforms. It would have been a small step to add 100s of volts of overvoltage protection.
Which is of course one among many non-answer answers. Others include: change the physical interface (don't use DE-9 or whatever!); stop using RS-232 (who even uses that anymore, right? Right?...); convince the customer that their interface(s) are dumb and need to change instead; etc.. (Obviously, contingent on how feasible any of these actually are.)
At least avoid using the same connector for RS-232 and other things.