If you don't mind, or want to, align the left object's local axes to one of its faces,then you can use a method like this one
However, if you want to retain the left object's local axis orientation with respect to its mesh, you can hand over the job of alignment to an intermediate parent object.
- In Edit Mode, select the face you want to align. ShiftS Cursor to selected, ShiftNumpad 7 align the view to the face.
- Back in Object Mode, ShiftA with 'Align to View' checked, create a helper cube, centered and correctly oriented:

- If you like, at this stage, you could rotate the helper 180 around its Y or X, in Object Mode, so its Z is pointing into the face to be aligned.

- CtrlP and 'Keep Transform', make the new helper parent to the left object.
- In Edit Mode, select the target face on the right object, and create a Custom Orientation from it. (2.79, Ctrl Alt Space, 2.8, Header, Transform Orientation dropdown, '+').
Make sure it's in use for the next step.

- With the helper selected, Header > Object menu > Transform > 'Align to Custom Orientation'. Now the objects' rotations are aligned...
... you can send the cursor to wherever you would like to snap the left object's face to, and snap the helper to the cursor..

..before AltP un-parenting the left object with 'Keep transform', and deleting the helper.
