10BASE-T. Shortly, to send a packet to Ethernet network, you need manchester encoded data at 10MHz. Manchester could be easily created from synchronous serial bus Clock and Data signals using XOR gate.
Fortunately, PIC18 USART can run at 10MHz in synchronous mode. Unfortunately, you need external XOR gates to convert DATA and CLK to differential Manchester.
DIP package. Both PIC18F1320 and 74AC86 exists in DIP package, so you could easily build this project on a breadboard.
Magnetics. You could use any ethernet magnetics you could get in your drawer. You could use DIY transformer made on small 2000 ferrite ring with approx 17 turns windings (inductance must be >350uH). If your line is not very long, you could run without magnetics at all, directly to twisted pair, in any case, your switch has magnetics to decouple. You could also use capacitors to decouple from twisted pair on device side.
Transmit only. Yes, this is a limitation, however, today, even simple transmission of UDP packet is enough to deliver your data to any host around the Earth. You could even use existing out-of-the-box tools to receive and store incoming UDP packets, say, use remote syslog feature to receive and store messages sent by your device.
Simple example provided in source archive sends UDP packet every second from 192.168.255.200:1024 (MAC 00:DE:AD:BE:EF:00) to 192.168.255.1:1024 (MAC 00:01:02:03:04:05). If you need other addresses and ports - just edit them in source code and rebuild. In the example 1st and 2nd bytes of UDP packet payload contains current PORTA and PORTB data respectively. Byte 18 is set to the value of TO flag of RCON register of PIC18.
Build. To build the example code you need gputils and sdcc. Just unpack and run make in /firmware directory
Other MCUs. Of course it is possible to use this method of UDP packets generation with any other MCU if it has synchronous serial peripheral capable of sending bytes back-to-back with 10MHz clock.
Let me first say that I admire your hack, but for me it brings to the fore various thoughts simmering in the background about IoT. Here are some anecdotes in no particular order. no logical structure, and not directly related to your project.
I don't know how it is where you live, but here Ethernet cabling has to be installed by qualified electricians, which adds to the cost. Of course that 10m Cat6 patch cable between my workstation and the switch in the next room is exempt.
A friend of mine had Ethernet cables and sockets installed in his home a couple of decades ago. He probably wouldn't do it again. I think he used Cat5. It's obsolete now.
The copper in the Ethernet cables in his home is worth more than most IoT devices. And copper is a valuable resource, jokes about copper in Chinese ICs notwithstanding. Also the ports on the switches also cost.
There is a whole generation of homebodies who have never used a wired port, except for the connection between the phone or VDSL socket in the wall to their wireless router.
Given the hassles and cost of setting up wired infrastructure, it's not surprising that wireless has been adopted with a vengance. For years now there have been more wireless devices on my LAN than wired.
Hence ESP8266 or ESP32 in every other MCU project here on HaD or so it seems.
Of course the irony is that now we have a proliferation of devices dependent on wall warts for power. But at least that is more ad-hoc than Ethernet cabling in the wall.
I've come to the conclusion that the next breakthrough in IoT is when devices have the means to harvest power from their surroundings in various ways, and be low powered enough to work with that scant energy. Or maybe tiny fuel cells where you feed the device some crumbs now and then. It would be like maintaining a pet. :) It's actually easier for devices out in the sun, they have to use solar cells. and power cords are not an option.