Well that depends on how you define a changed row.
Number 2 works but any change at all to the row will change the timestamp even an update that doesn't actually change anything (say updating the value from 1 to 1). Sounds silly who would do that? But it's easy to do when you use dynamic code.
Number 1 can be modified to ensure there is a differnce between the inserted and deleted tables in the trigger and fixes the problem of Option 2.
However, suppose you have three different feeds that each contain different columns which might be in related tables and you only want to send if one of those actually changes. Now a trigger isn't specific enough to your feeds. We use change data tracking to identity which rows have changed since the last send date (which we store as part of all our SSIS pacakges) and then calculate rowhash data for specific columns to see if the data we are interested in actually changed. I've also seen people use a history table of what was sent and then compare those values (if you are only interested in one or two fields in table) to the ones that actually changed in the change data tracking table. When you have a requirement this specific, you end up with quite a complex system to support it (I'm just giving you a rough idea).