I just send a card/picture, letter of request, and self-addressed stamped return envelope (SASE) to the player in care of the team they're currently with. I usually send cards because I've collected them for a while, but lately I've been sending small pictures to players I don't have a card readily handy for, mostly minor leaguers and junior players. For example, the picture I sent to Ness was a picture of him I found on Google Images, printed out onto photo paper, and cut out. If you're more technologically literate than I am, then you can probably just print 4x6s without going to the extra hassle of having to cut them out and stuff. I've sent 8x10s before, too, but they're a bit more of a hassle because you need the bigger envelopes and have to get them weighed at the post office, etc.
The letter is usually the toughest part. You're asking for the autograph while also explaining why you're a fan of the player. Not all the players even read them, but I try to make them nice, anyway. It shouldn't be a five-paragraph essay, but should be more than just "Please sign this," too. Being genuine is the biggest thing. Mine are usually about half a page, starting by saying I'm a big fan and would appreciate if they'd take the time to sign what I sent them. Then go into why you like them for a couple sentences; for instance, you can mention a particular goal they scored or something else about them that sticks out to you. Then I wrap up by thanking them for their time and wishing them good luck with the rest of the year. I also personally add a P.S. telling them to personalize the card/picture if they'd like to (this shows that you're not just gonna turn around and sell it). So short, sweet, and genuine are the three big takeaways there.
The SASE is pretty much to save the player time and money. Lots of players won't send your stuff back if you don't provide them with a way to do so. It makes it so the player doesn't have to take the time to write out a new envelope and use their own stamps.
Of course, not all players sign and not all players sign everything. I usually look here to see if anyone's had success with a player in the last year or so. The only downside is you have to join the website to see the addresses, because some of them, especially retired players, were obtained through home addresses, which aren't as publicly available as team addresses. I'm not comfortable sending to those.
SCF - TTMM player list
Addresses are usually pretty easy to find. You can either Google them or search them on this website (I usually do the latter):
★ FanMail.biz: The Celebrity Addresses Database
This site has accurate AHL and juniors addresses, but hasn't been updated since 2016 so some more recent teams are missing (but in any case, you should be able to find any address you need either on Google or on the team's website):
Addresses - Hockey
He also has a good FAQ section on his page that covers a lot of bases.
Ask Mac - Frequently Asked Questions
Success isn't guaranteed no matter who you send to. Sometimes it takes a few weeks, sometimes several months, sometimes you never see your item back again. But it's still a really fun hobby. Hopefully this helps. If you wanna know anything else, you can always shoot me a message and I'll be glad to help.